Одне правило: запитайте себе: "Чи має сенс називати цей метод, навіть якщо жоден об'єкт ще не побудований?" Якщо так, то це безумовно має бути статичним.
Тож у класі у Carвас може бути метод:
double convertMpgToKpl(double mpg)
... що було б статично, тому що, можливо, хочеться знати, в що перетворюється 35mpg, навіть якщо ніхто ніколи не будував Car. Але цей метод (який встановлює ефективність одного конкретного Car):
void setMileage(double mpg)
... не може бути статичним, оскільки неможливо викликати метод до того, як будь- Carякий був побудований.
(До речі, зворотне не завжди відповідає дійсності: іноді може бути метод, який включає два Carоб'єкти, і все-таки хочеться, щоб він був статичним. Наприклад:
Car theMoreEfficientOf( Car c1, Car c2 )
Хоча це може бути перетворене на нестатичну версію, деякі вважають, що оскільки не існує "привілейованого" вибору, який Carважливіший, ви не повинні змушувати абонента вибирати його Carяк об'єкт, до якого будете викликати метод на. Однак ця ситуація становить досить малу частину всіх статичних методів.)