1. Объявление методаstatic
дает небольшое преимущество в производительности, но, что более полезно, позволяет использовать его, не имея под рукой экземпляра объекта (подумайте, например, о фабричном методе или получении синглтона). Он также служит документальной цели раскрытия сущности метода. Эту документальную цель не следует игнорировать, поскольку она дает немедленную подсказку о природе метода читателям кода и пользователям API, а также служит инструментом мышления для исходного программиста - явное указание предполагаемого значения помогает вы также мыслите правильно и производите более качественный код (я думаю, исходя из моего личного опыта, но люди разные). Например, логично и, следовательно, желательно проводить различие между методами, работающими с типом, и методами, действующими на экземпляр типа (как указано вДжон Скит в своем комментарии к вопросу о C # ).
Еще один вариант использования static
методов - имитировать интерфейс процедурного программирования. Подумайте о java.lang.System.println()
классе, его методах и атрибутах. Класс java.lang.System
используется как пространство имен группировки, а не как экземпляр объекта.
2. Как Eclipse (или любой другой запрограммированный или другой вид - биосовместимый или небиосоставный - объект) может точно знать, какой метод может быть объявлен как статический? Даже если базовый класс не обращается к переменным экземпляра или не вызывает нестатические методы, с помощью механизма наследования все может измениться. Только если метод не может быть переопределен путем наследования подкласса, мы можем утверждать со 100% уверенностью, что метод действительно может быть объявлен static
. Переопределение метода невозможно точно в двух случаях:
private
(ни один подкласс не может использовать его напрямую и даже в принципе не знает об этом), или
final
(даже если этот метод доступен подклассу, нет возможности изменить метод для ссылки на данные экземпляра или функции).
Отсюда логика опции Eclipse.
3. На исходном плакате также спрашивается: « Указание метода как статического, я полагаю, показывает, что вы не используете никакие переменные экземпляра, поэтому их можно переместить в класс стиля utils? » Это очень хороший момент. Иногда на такое изменение дизайна указывает предупреждение.
Это очень полезная опция, которую я лично обязательно включил бы, если бы я использовал Eclipse и программировал на Java.