1. Метод декларуванняstatic
дає невеликі переваги в продуктивності, але, що є більш корисним, дозволяє використовувати його, не маючи під рукою екземпляра об'єкта (подумайте, наприклад, про заводський метод або отримання сингтона). Це також служить документальній меті - розповісти про характер методу. Цю документальну мету не слід ігнорувати, оскільки вона дає негайну підказку про природу методу читачам коду та користувачам API, а також служить інструментом мислення для оригінального програміста - явна інформація щодо передбачуваного значення допомагає Ви також думаєте прямо і створюєте більш якісний код (я думаю, виходячи зі свого особистого досвіду, але люди різні). Наприклад, логічно і, отже, бажано розрізняти методи, що діють на тип, і методи, що діють на екземпляр типу (на що вказуєДжон Скіт у своєму коментарі до запитання на C # ).
Ще одним варіантом використання static
методів є імітація інтерфейсу процедурного програмування. Подумайте про java.lang.System.println()
клас та методи та атрибути в ньому. Клас java.lang.System
використовується як простір імен групування, а не як екземплярний об'єкт.
2. Як Eclipse (або будь-який інший запрограмований чи інший вид - біокомпонується чи не біокомпонується - сутність) може точно знати, який метод можна оголосити статичним? Навіть якщо базовий клас не отримує доступ до змінних екземпляра або не викликає нестатичних методів, за механізмом успадкування все може змінитися. Тільки якщо метод неможливо замінити шляхом успадкування підкласу, ми можемо із 100% впевненістю стверджувати, що метод дійсно може бути оголошений static
. Замінити метод неможливо саме в двох випадках існування
private
(жоден підклас не може використовувати його безпосередньо і навіть в принципі не знає про це), або
final
(навіть якщо доступний для підкласу, немає можливості змінити метод на посилання на дані екземпляра або функції).
Звідси логіка опції Eclipse.
3. Оригінальний плакат також запитує: " Вказуючи метод як статичний, я гадаю, це показує, що ви не використовуєте жодних змінних екземпляра, тому їх можна було б перемістити до класу стилю utils? " Це дуже хороший момент. Іноді на подібні зміни конструкції вказує попередження.
Це дуже корисна опція, яку я б особисто переконався увімкнути, якби я використовував Eclipse і якби я програмував на Java.