web-dev-qa-db-fra.com

quand sommes-nous censés utiliser "public static final string"

J'ai vu beaucoup de code où les gens écrivent public static final String mystring = ....__ et n'utilisent qu'une valeur.

Pourquoi doivent-ils faire cela? Pourquoi doivent-ils initialiser la valeur avec final avant de l’utiliser?

METTRE À JOUR

Ok, merci à tous pour toutes vos réponses, je comprends le sens de ces clés (finale statique publique). Ce que je ne comprends pas, c'est pourquoi les gens l’utilisent même si la constante ne sera utilisée qu’à un seul endroit et dans la même classe. pourquoi le déclarer? pourquoi n'utilisons-nous pas simplement la variable? 

39
storm_buster

final indique que la valeur de la variable ne changera pas - en d'autres termes, une variable dont la valeur ne peut pas être modifiée après sa déclaration.

Utilisez public final static String lorsque vous souhaitez créer une String qui:

  1. appartient à la classe (static: aucune instance nécessaire pour l'utiliser), et que
  2. ne changera pas (final), par exemple lorsque vous souhaitez définir une constante String qui sera disponible pour toutes les instances de la classe et pour les autres objets utilisant cette classe.

Exemple:

public final static String MY_CONSTANT = "SomeValue";

// ... in some other code, possibly in another object, use the constant:
if (input.equals(MyClass.MY_CONSTANT)

De même:

public static final int ERROR_CODE = 127;

Il n'est pas obligatoire d'utiliser final, mais il empêche une constante d'être modifié par inadvertance pendant l'exécution du programme et sert d'indicateur indiquant que la variable est une constante.

Même si la constante ne sera utilisée - lue - que dans la classe en cours et/ou à un seul endroit, il est recommandé de déclarer toutes les constantes comme étant final: c'est plus clair, et pendant la durée de vie du code, la constante peut finir par être utilisée dans plus d'un endroit.

De plus, l'utilisation de final peut permettre à la mise en oeuvre d'effectuer certaines optimisations, par exemple. en insérant une valeur réelle dans laquelle la constante est utilisée. 

67
pb2q
  1. Moyens statiques..Vous pouvez l'utiliser sans instancier de la classe ni utiliser d'objet.
  2. final..C'est un mot clé qui est utilisé pour rendre la chaîne constante. Vous ne pouvez pas changer la valeur de cette chaîne. Regardez l'exemple ci-dessous:

      public class StringTest { 
               static final String str = "Hello"; 
      public static void main(String args[]) { 
               // str = "world"; // gives error 
               System.out.println(str); // called without the help of an object                       
               System.out.println(StringTest.str);// called with class name  
                 } 
             } 
    

Merci

9

Le mot-clé final signifie que la valeur est constante (elle ne peut pas être modifiée). C'est analogue à const en C.

Et vous pouvez traiter static comme une variable globale ayant une portée. Cela signifie fondamentalement que si vous le changez pour un objet, il le sera pour tous comme une variable globale (limitée par la portée).

J'espère que ça aide.

4
Fyre

final indique que la valeur ne peut pas être modifiée une fois définie. static vous permet de définir la valeur. Cette valeur sera la même pour TOUTES les instances de la classe qui l'utilise. En outre, vous pouvez accéder à la valeur d'une chaîne public static sans avoir d'instance de classe.

2
Madbreaks

static signifie que l'objet ne sera créé qu'une seule fois et qu'aucun objet d'instance ne le contient. La meilleure façon d'utiliser ce que vous écrivez est d'utiliser quelque chose qui est commun à tous les objets de la classe et qui ne changera jamais. Il pourrait même être utilisé sans créer d'objet du tout.

Il est généralement préférable d’utiliser final lorsque vous vous attendez à ce que ce soit final afin que le compilateur applique cette règle et que vous le sachiez. static vous assure de ne pas gaspiller de mémoire en créant un grand nombre de choses identiques si elles ont la même valeur pour tous les objets.

2
Carl

Généralement, vous définissez des constantes que vous réutilisez à plusieurs endroits, ce qui en fait un point de changement unique, utilisé dans une classe unique ou partagé entre plusieurs packages. Faire une finale variable éviter les changements accidentels.

1
devang

public le rend accessible aux autres classes. Vous pouvez l'utiliser sans instancier de la classe ni utiliser d'objet.

static en fait une valeur uniforme pour toutes les instances de la classe . Cela vous évite de gaspiller de la mémoire en créant une grande partie de la même chose si sa valeur est identique pour tous les objets.

final en fait une valeur non modifiable. C'est une valeur "constante" qui est la même pour toutes les instances de la classe et ne peut pas être modifiée.

1
Nikhil Kotak

C’est un peu la norme/meilleure pratique . Il existe déjà des réponses à la liste des scénarios, mais pour votre deuxième question:

Pourquoi doivent-ils faire cela? Pourquoi doivent-ils initialiser la valeur en tant que finale avant de l’utiliser?

Les constantes publiques et les champs initialisés lors de la déclaration doivent être "statiques finales" plutôt que simplement "finales"

Voici certaines des raisons pour lesquelles cela devrait être comme ceci:

  1. Rendre une constante publique juste final, par opposition à final statique, conduit à dupliquer sa valeur pour chaque instance de la classe, augmentant inutilement la quantité de mémoire requise pour exécuter l'application.

  2. En outre, lorsqu'un champ final non public n'est pas également statique, cela signifie que différentes instances peuvent avoir des valeurs différentes. Cependant, l'initialisation d'un champ final non statique dans sa déclaration oblige chaque instance à avoir la même valeur en raison du comportement du champ final .

0
KumarAnkit

public le rend accessible à travers d'autres classes .static en fait une valeur uniforme pour toutes les instances de la classe .final en fait une valeur non modifiable . Il s'agit donc en gros d'une valeur " constante " qui est La même chose dans toutes les instances de la classe et qui ne peut pas être modifiée . En ce qui concerne votre préoccupation "Ce que je ne comprends pas, c’est pourquoi les gens l’utilisent même si la constante ne sera utilisée qu’à un seul endroit et dans la même classe. Pourquoi la déclarer? Pourquoi n'utilisons-nous pas simplement la variable? " Je dirais que, puisqu'il s'agit d'un champ public, la valeur constante peut également être utilisée ailleurs dans une autre classe à l'aide de ClassName.value. Par exemple: une classe nommée Math peut avoir PI comme valeur statique longue finale accessible à Math.PI.

0
Sachin Tiwari

Pourquoi les gens utilisent-ils des constantes dans les classes au lieu d'une variable?

lisibilité et maintenabilité, 

avoir un nombre tel que 40.023 dans votre code ne dit pas grand-chose sur ce que le nombre représente, nous le remplaçons donc par un mot en majuscule comme "USER_AGE_YEARS". Plus tard, lorsque nous examinons le code, nous voyons clairement ce que ce nombre représente. 

Pourquoi n'utilisons-nous pas simplement une variable? Eh bien nous le ferions si nous savions que le nombre changerait, mais si c'est un nombre qui ne changera pas, comme 3.14159 .. nous le rendrons final.

Mais que se passe-t-il si ce n'est pas un nombre comme une chaîne? Dans ce cas, c'est principalement pour la maintenabilité, si vous utilisez une chaîne plusieurs fois dans votre code (et qu'elle ne changera pas à l'exécution), il est pratique de la placer comme chaîne finale en haut de la classe. Ainsi, lorsque vous souhaitez le changer, il n’ya qu’un seul endroit pour le changer plutôt que plusieurs. 

Par exemple, si vous avez un message d'erreur qui s'imprime plusieurs fois dans votre code, la dernière chaîne est ERROR_MESSAGE = "Une erreur s'est produite." est plus facile à maintenir, si vous voulez changer de "Quelque chose a mal tourné." Pour "Il est trop tard, jim il est déjà mort", il vous suffirait de changer cette ligne plutôt que tous les endroits où vous utiliseriez ce commentaire.

0
kiwicomb123