Quelle est la différence entre final et statique en Java?


Meilleure réponse

Euh, ce sont des concepts entièrement différents.

Un membre marqué comme statique appartient à la classe, plutôt quà une instance particulière. Parfois, les classes peuvent navoir que des membres statiques, un exemple évident étant la classe java.lang.Double qui «encadre» les doubles primitives: vous pouvez obtenir la valeur dun double individuel via une méthode dinstance (myDouble.doubleValue()) mais obtenir des choses «universelles» via des membres statiques (Double.MAX\_VALUE).

Un membre marqué final ne peut pas * avoir sa valeur (qui est sa valeur si primitive, ou sa référence si objet) a changé une fois initialisé. Vous pourrez peut-être encore modifier les propriétés dun objet (il peut être mutable ) mais vous ne pouvez pas * remplacer lobjet par un autre. (* Vous pouvez techniquement « tricher » avec la réflexion, la manipulation de bytecode ou dautres moyens de « briser les règles », mais si vous faites celles-ci, vous savez re «triche».)

Réponse

Pour savoir quand utiliser

private static final X x;

Vous devriez savoir à quoi servent ces mots-clés.

Voyons voir

  1. private – Il est utilisé lorsque vous souhaitez restreindre certains membres d’une classe à ne pas être accessible en dehors de cette classe.
  2. static – Lorsque vous déclarez un membre static, il est lié à sa classe et non à un objet. Pour simplifier, le membre statique sera initialisé lorsque la classe est chargée. Ainsi, chaque fois que vous mettez à jour la valeur de ce membre, tous les endroits où il est référencé seront également mis à jour. Par conséquent, les membres statiques sont accessibles par nom de classe et non leurs objets en tant que valeur de membre resteront les mêmes quels que soient les objets.
  3. final – Ce mot clé, lorsquil est utilisé avec des variables membres, définit quune fois la classe chargée et la valeur attribuée, elle ne peut pas être modifiée.

Voyons donc ce qui se passe lorsque vous déclarez une variable comme ci-dessous:

private static final String PRIVATE\_STATIC\_FINAL\_STRING = "String";

Maintenant,

PRIVATE\_STATIC\_FINAL\_STRING est défini comme privé donc il a gagné « t être accessible en dehors de sa classe déclarante. » Il est également défini comme statique, donc sa valeur restera la même quels que soient les objets de sa « classe ». Et il est défini comme final, donc une fois la classe chargée, sa valeur ne sera pas modifiée.

Par conséquent, PRIVATE\_STATIC\_FINAL\_STRING fonctionnera comme une chaîne de niveau de classe non modifiable qui ne sera pas accessible en dehors de sa classe déclarante.

Jespère que cela vous aidera à dissiper vos doutes. Si vous avez besoin daide supplémentaire, vous pouvez me contacter et je vais essayer de vous aider autant que possible.

Bonne chance et bon apprentissage!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *