Une seule règle-de-pouce: demandez-vous "est-il judicieux d'appeler cette méthode, même si aucune Obj a été construit à l'époque?" Si oui, il devrait certainement être statique.
Ainsi, dans une classe Car
vous pouvez avoir une méthode double convertMpgToKpl(double mpg)
qui serait statique, car on peut avoir envie de savoir ce que 35mpg convertit, même si personne n'a jamais construit une Voiture. Mais void setMileage(double mpg)
(ce qui définit l'efficacité d'une Voiture particulière) ne peut pas être statique, car il est inconcevable pour appeler la méthode avant de la Voiture a été construite.
(Btw, l'inverse n'est pas toujours vrai: vous pouvez parfois avoir une méthode qui implique deux Car
objets, et voulez toujours être statique. E. g. Car theMoreEfficientOf( Car c1, Car c2 )
. Bien que cela pourrait être converti à un non-version statique, certains diront que depuis il n'y a pas un "privilège" choix de la Voiture est plus important, vous ne devriez pas en vigueur à l'appelant de choisir une Voiture que l'objet que vous allez appeler la méthode. Cette situation représente une assez petite fraction de toutes les méthodes statiques, cependant).