powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Какой смысл делать методы static?
29 сообщений из 29, показаны все 2 страниц
Какой смысл делать методы static?
    #39284321
Создаем класс Base, c полями и методами. Затем создаем экземпляры этого класса. Каждый экземпляр - объект в памяти со своей копией полей. Копий методов не создается же, они всегда в одном экземпляре, как и static поля. В чем тогда смысл static методов? Только в том, что их можно вызывать не создавая экземпляр класса, в котором они определены?
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284334
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
летатель космоса,

Методы объекта оперируют состоянием объекта. Статические методы состоянием объекта не оперируют. В большинстве случаев статические методы не нужны. В Java они часто используются там где класс уже нельзя расширить, а хочется. Например StringUtils, DBUtils, IOUtils. В прикладном программировании нужно сильно подумать прежде чем создать статические метод. Статический методы не обладают полиморфизмом в рантайме. Поэтому если ими злоупотреблять то всё ООП пойдет лесом.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284350
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
летатель космоса,
1) Собрать несколько процедур типа Умножить_на_число_ПИ вместе. Тогда они будут вызываться с префиксом Класс_математики.УмножитьНаПИ()
2) То же самое необходимо попросить у объекта. Например перевести курс валюты. Состояние не требуется. Вводят статический метод.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284355
Blazkowiczлетатель космоса,
Методы объекта оперируют состоянием объекта. Статические методы состоянием объекта не оперируют.
В с++ в каждый метод объекта неявно первым параметром передается ссылка на объект своего типа - у python, если я правильно понял, этот параметр self, который нужно передавать явно. В java это как раз "методы объекта оперируют состоянием объекта - статические методы состоянием объекта не оперируют"? Т.е. если метод static, то у него нет неявного параметра, а если не-static, то есть?
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284368
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
летатель космосаВ с++ в каждый метод объекта неявно первым параметром передается ссылка на объект своего типа - у python, если я правильно понял, этот параметр self, который нужно передавать явно.
Историческая справка?


летатель космосаВ java это как раз "методы объекта оперируют состоянием объекта - статические методы состоянием объекта не оперируют"? Т.е. если метод static, то у него нет неявного параметра, а если не-static, то есть?
Нет никаких не явных параметров в Java. Есть ссылка this на экземпляр. Она параметром не является.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284398
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
летатель космосаВ java это как раз "методы объекта оперируют состоянием объекта - статические методы состоянием объекта не оперируют"? Т.е. если метод static, то у него нет неявного параметра, а если не-static, то есть?
Нет никаких не явных параметров в Java. Есть ссылка this на экземпляр. Она параметром не является.[/quot]
Является.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284399
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
непонятно почему ТС вообще слез со своего вопроса в неявные параметры.
За жизнь поговорить?
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284401
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Является.
С гуя ли?
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284402
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz...
Нет никаких не явных параметров в Java. Есть ссылка this на экземпляр. Она параметром не является.
ээммм.... как это - параметром не является?
а чем является aload_0 ?
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-3.html#jvms-3.7
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284406
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
несмотря на то, что в сигнатуре метода этого нет (неважно, что это за ОО язык, java, c++, c#, Delphi наконец), на уровне исполняемого кода указатель на объект помещается компилятором в стек при вызове и извлекается из стека в начале метода. Это и называют неявным параметром. В языках, где доступны указатели, можно получить доступ и к этому параметру.
То есть, фактически работаем с self, this, etc... как с параметром, но в сигнатуре не объявляем. Впрочем, не нравится название - не буду настаивать.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284409
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczno56892Является.
С гуя ли?
авторThe Java Virtual Machine uses local variables to pass parameters on method invocation. On class method invocation, any parameters are passed in consecutive local variables starting from local variable 0. On instance method invocation, local variable 0 is always used to pass a reference to the object on which the instance method is being invoked (this in the Java programming language). Any parameters are subsequently passed in consecutive local variables starting from local variable 1.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284411
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Статические методы в яве нужны для того, чтобы создать первый объект при старте программы. Все остальное уже просто дополнительные плюшки статических методов.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284412
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
летатель космосаСоздаем класс Base, c полями и методами. Затем создаем экземпляры этого класса. Каждый экземпляр - объект в памяти со своей копией полей. Копий методов не создается же, они всегда в одном экземпляре, как и static поля. В чем тогда смысл static методов? Только в том, что их можно вызывать не создавая экземпляр класса, в котором они определены?
В до-ООП-шную эпоху кодеры писали код без объектов. Вызывая процедуры и функции
в контексте.

Например

Код: pascal
1.
x := getResult (context, arg1, arg2 ....);



где контекст мог определять некое глобальное состояние приложения или просто
некое состояние вычислений. Косвенно, такой способ и сейчас используется
ассемблером для иммитации ООП и JVM примерно работает так-же.

Во времена развития Java 1.1-1.4 вызвать функцию синуса можно было только указав
имя объекта Math:

Код: java
1.
double sin = Math.sin(Math.PI);



У математиков подобная форма юзкейса вызывает приступы смеха. Представьте себе
как будет выглядеть формула где очень много таких обращений. Здесь удобство
было принесено в жертву ООП идеалам.

Чуть позже был добавлен статический импорт.
Код: java
1.
double sin = sin(Math.PI);



Однако JVM все равно ссылается на полное название статик-функции как java.lang.Math.sin.
Впрочем нас это не волнует. Бинарный код обещает быть производительным. А длинное
имя остается способом решения конфликта имен.

По поводу смыслов.

Я думаю смысл static методов понятен. Это функции без состояний. Кстати некоторые
IDE детектируют класс утилит (Utils) и предлагают вам добавить приватный конструктор

Код: java
1.
2.
3.
public class Utils{
   private Utils(){};
}



Это явный запрет на инстанциирование утилит. Если вы уже кодили мультипоточные приложения
то попадали на "гонки" и "голодания" ресурсов. Это когда есть некая горячая точка в коде
которая является разделяемым объектом и она постоянно всем нужна. И избавление
от гонок - это задача для более высокого уровня seniority. Просто надо больше всего
знать по Java и программно-аппаратной архитетуре.
Здесь многие йуные кодеры пассуют и ищут способов писать надежно и безопасно.
Один из самых простых и надежных вариантов избавления от голодания - это внедрять
как можно больше чистых функций (pure functions) которые с гарантией можно реализовать
как static-методы. При этом еще желательно проанализировать их тело чтоб внутри не было
зависимостей от других разделяемых статических переменных. Есть еще альтернативные
варианты где все таки можно создавать экземпляр утилит и использовать их с ThreadLocal
переменной но он более сложен и требует больше манипуляций.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284418
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892,

Ладно. Убедили. Тяжелое наследие C++.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284461
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton...
В до-ООП-шную эпоху кодеры писали код без объектов. Вызывая процедуры и функции
в контексте.
...

Ну, тут надо разбираться - что такое "ООП-шная" эпоха.
Алан Кэй (Alan Curtis Kay - изобретатель ООП, получивший за это премию Тьюринга в 2003 году)
- вообще считает, что сия "эпоха" не состоялась, время потраченное на нее - целиком потеряно
зря и программирование придется переоткрывать/пересоздавать/перевнедрять заново.

То, что он считает правильным ооп-программированием достаточно близко к тому, что сейчас называют микросервисами. Но начинается ооп-програмирование, по Кэю, не раньше того момента, как в системе появляется позднее связывание.

Погугли. Это и познавательное и занимательное как чтение, так и зрелище - видео с ним есть.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284471
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Есть разные взгляды на ООП. И скажем те технологии которые использует java
- это злостный хак ООП. Например рефлексией и установкой атрибута можно открыть private
поля. Инструментированием можно переопределить поведение методов. И это не пререгрузка
виртуального мать его метода. Это именнно хак.

И поэтому когда говорят о Java-OOP - надо говорить именно о реализации ООП в Java.
А общую философию можно кинуть в мусорное ведро. Она не состоялась. Туда же лесом
идет Бьярне со своими шаблонами.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284474
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О нет, #trueoop срач дошел и до сюда ... ((
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284487
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Бъярне не трожь.
Шаблоны ему от Степанова, вместе с переносом generic-кода STL в наследство от ADA достались.

Они, правда, неплохо ладят меж собой, оба считая, что достаточно удачно скрестили философию математики с программированием в этом месте.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284506
Спасибо!
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284699
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyШаблоны ему от Степанова, вместе с переносом generic-кода STL в наследство от ADA достались.
Ого... вот это поток сознания...
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284793
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton...
Ого... вот это поток сознания...
этот краковяк так танцуется:
1) фак от Страуструпа
http://www.stroustrup.com/bs_faq.html#generic

2) объяснение слов
https://en.wikipedia.org/wiki/Generic_programming
из которого следует вынести, что Александр на пару с Массером - изобретатели самого
термина "обобщенное программирование".

3) интервью с Александром,
http://www.stlport.org/resources/StepanovUSA.html

из которого можно почерпнуть информацию, что
книжка "The Ada Generic Library: Linear List Processing Packages", by David R. Musser and Alexander A. вышла в 1989 году.

т.е. первоначально Александр этой темой занимался в Ада, а потом перетек в C++,
как в "лучший из языков", вместе с темой и Массером.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284806
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton...
Ого... вот это поток сознания...

эх, ... вообще, конечно, досадно бывает...
В Англии ружья кирпичем не чистят.

В америках всякая книжка про алгоритмы с упоминания Анатолия Алексеевича Карацубы начинается.
тамошний студент не может не знать - кто это такой.
А у нас, не всякий, даже твердо уверенный в том, что он - программист, догадывается о том - кто это, и зачем его надо помнить...
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39284841
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
летатель космосаСоздаем класс Base, c полями и методами. Затем создаем экземпляры этого класса. Каждый экземпляр - объект в памяти со своей копией полей. Копий методов не создается же, они всегда в одном экземпляре, как и static поля. В чем тогда смысл static методов? Только в том, что их можно вызывать не создавая экземпляр класса, в котором они определены?

Да, только в этом, и этого уже достаточно.

Надо также напомнить, что существуют более другие языки программирования, менее упоротые в объектно-ориентированном плане,
так там вообще есть "свободные функции" -- функции, не принадлежащие никакому классу. Статические методы Java -- как раз аналог таких функций, поэтому их существование очень важно, иначе Java была бы ООП упоротой более чем абсолютно.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39285060
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Статический метод это скорее исключение. У нас в программе все может меняться, а стат метод не переопределить. Зато к нему доступ фактически глобальный (плюс это или минус решать вам) Зато мы не создавая экземпляр класса можем юзать методы данного класса (хороший пример класс math и его ф-ии). Практическое применение? Ну вот от фонаря - подсчет количества созданных экземпляров класса. Создаем стат переменную count и стат ф-ю которая его инкрементирует.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39285079
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый очевидный ответ на вопрос "Зачем нужны статические методы", очевидно, такой: чтобы через эти методы работать со статическими переменными.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39285096
FishHookСамый очевидный ответ на вопрос "Зачем нужны статические методы", очевидно, такой: чтобы через эти методы работать со статическими переменными.
Если static переменная не private, то почему я не могу обратиться к ней напрямую?
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39285102
MasterZivДа, только в этом, и этого уже достаточно.

Были подозрения, что это сделано, чтобы обойти ограничение концепции ООП, так же как трейты\примеси в некоторых языках - чтобы обойти ограничения на запрет множественного наследования. Сделали дизайн, потом стали придумывать как обойти "узкие" места.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39285162
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без static метода было бы сложно реализовать синглтон именно так как требуется автору.
Ну как минимум было-бы сложно гарантировать его свойства.
...
Рейтинг: 0 / 0
Какой смысл делать методы static?
    #39285166
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
летатель космосаFishHookСамый очевидный ответ на вопрос "Зачем нужны статические методы", очевидно, такой: чтобы через эти методы работать со статическими переменными.
Если static переменная не private, то почему я не могу обратиться к ней напрямую?

Да пожалуйста, но бывает логика сложнее простого чтения/записи. Хотя бы классический синглтон

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class Singleton {
	private static Singleton instance;
	
	public static synchronized Singleton getInstance() {
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}
}
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Какой смысл делать методы static?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]