Ответить
Андрей Андреев
декабрь 2015.
422

В чем отличие статических от динамических методов в Джаве?

Ответить
Комментировать
0
Подписаться
0
2 ответа
Поделиться

Особенности того, что вы подразумевали, плюс в квадратных скобках официальное название в соответствии с глоссарием от Oracle:

Когда вы разрабатываете класс (прототип объекта), все поля и методы без модификатора static описывают конкретное свойство каждого объекта - например, скорость движения конкретного автомобиля veh1 класса Vehicle. В этом классе может быть метод getSpeedKMph(), возвращающий скорость этого автомобился в км/ч.

- [method / instance method] метод объекта

Если он не отмечен модификатором static, то в коде метода есть доступ к текущему объекту с помощью ключевого слова "this". Скорость считаем на основе значения из this. Получаем результат с помощью выражения "int kmph = veh1.getSpeedKMph()".

- [static method / class method] статический метод

Если же сделать метод статическим с помощью модификатора static, то он будет находится не в контектсе объектов veh1, veh2 и т.д., а только в самом типе Vehicle. Его вызов будет возможен через Vehicle.getSpeedKMph(). При этом доступа к конкретному объекту через "this" в нем естественно не будет, так как он не упоминается при вызове метода. Для того что бы переделать метод на статический придется добавить аргумент для вызова этого метода (Vehicle veh) и заменить слова "this" внутри кода на, собственно, veh. И вызывать с помощью конструкции: "int kpmh = Vehicle.getSpeedKMph(veh)".

Dmitrij Igorevichотвечает на ваши вопросы в своейПрямой линии

Статические методы принадлежат классам, а динамические — конкретным объектам на их основе. Например, если у вас есть класс Градусник, вы можете сделать в нем статический метод, который будет пересчитывать температуру из градусов по Цельсию в градусы по Фаренгейту, и вы сможете вызывать его как Градусник.пересчет(т), даже когда ни одного объекта Градусник еще не было создано. Естественным образом, статические методы не могут использовать никакие переменные, характеризующие конкретные объекты (вроде цены конкретного градусника, если у вас есть такое поле).