Une règle d'or: demandez-vous "Est-il judicieux d'appeler cette méthode, même si aucun objet n'a encore été construit?" Si tel est le cas, il devrait certainement être statique.
Donc, dans une classe, Car
vous pourriez avoir une méthode:
double convertMpgToKpl(double mpg)
... qui serait statique, car on pourrait vouloir savoir à quoi convertit 35mpg, même si personne n'a jamais construit de fichier Car
. Mais cette méthode (qui définit l'efficacité d'un particulier Car
):
void setMileage(double mpg)
... ne peut pas être statique car il est inconcevable d'appeler la méthode avant d'en Car
avoir construit une.
(Soit dit en passant, l'inverse n'est pas toujours vrai: vous pouvez parfois avoir une méthode qui implique deux Car
objets, et toujours vouloir qu'elle soit statique. Par exemple:
Car theMoreEfficientOf( Car c1, Car c2 )
Bien que cela puisse être converti en une version non statique, certains diront que puisqu'il n'y a pas de choix "privilégié" qui Car
est plus important, vous ne devriez pas forcer un appelant à en choisir un Car
comme objet que vous invoquerez le méthode activée. Cette situation représente cependant une fraction assez faible de toutes les méthodes statiques.)