Je suis toujours confus entre static
et les final
mots clés dans java .
Comment sont-ils différents ?
Regardons d'abord les variables statiques et les méthodes statiques.
Class.variable
Class.methodName()
this
- super
clés.Java a également des «classes imbriquées statiques». Une classe imbriquée statique est juste une classe qui n'a pas implicitement de référence à une instance de la classe externe.
Les classes imbriquées statiques peuvent avoir des méthodes d'instance et des méthodes statiques.
Il n'y a pas de classe statique de premier niveau en Java.
La méthode principale est
static
qu'elle doit être accessible pour qu'une application s'exécute avant toute instanciation.
final
Le mot-clé est utilisé dans plusieurs contextes différents pour définir une entité qui ne peut pas être modifiée ultérieurement.Une final
classe ne peut pas être sous-classée. Ceci est fait pour des raisons de sécurité et d'efficacité. En conséquence, de nombreuses classes de bibliothèques standard Java sont final
, par exemple, java.lang.System
et java.lang.String
. Toutes les méthodes d'une final
classe sont implicitement final
.
Une final
méthode ne peut pas être remplacée par des sous-classes. Ceci est utilisé pour empêcher un comportement inattendu d'une sous-classe modifiant une méthode qui peut être cruciale pour la fonction ou la cohérence de la classe.
Une final
variable ne peut être initialisée qu'une seule fois, via un initialiseur ou une instruction d'affectation. Elle n'a pas besoin d'être initialisée au point de déclaration: c'est ce qu'on appelle une blank final
variable. Une variable d'instance finale vide d'une classe doit être définitivement affectée à la fin de chaque constructeur de la classe dans laquelle elle est déclarée; de même, une variable statique finale vide doit être définitivement affectée dans un initialiseur statique de la classe dans laquelle elle est déclarée; sinon, une erreur de compilation se produit dans les deux cas.
Lorsqu'une classe interne anonyme est définie dans le corps d'une méthode, toutes les variables déclarées final
dans la portée de cette méthode sont accessibles depuis la classe interne. Une fois affectée, la valeur de la variable finale ne peut pas changer.
Class.methodName()
static signifie qu'il appartient à la classe et non à une instance, cela signifie qu'il n'y a qu'une seule copie de cette variable / méthode partagée entre toutes les instances d'une classe particulière .
final est totalement indépendant, c'est une manière de définir une initialisation unique. Vous pouvez soit initialiser lors de la définition de la variable, soit dans le constructeur, nulle part ailleurs.
note Remarque sur les méthodes finales et les classes finales, c'est une manière de déclarer explicitement que la méthode ou la classe ne peut pas être remplacée / étendue respectivement.
Lecture supplémentaire Donc sur le thème de la statique, nous parlions des autres utilisations qu'elle peut avoir, elle est parfois utilisée dans des blocs statiques. Lors de l'utilisation de variables statiques, il est parfois nécessaire de définir ces variables avant d'utiliser la classe, mais malheureusement, vous n'obtenez pas de constructeur. C'est là qu'intervient le mot-clé static.
Vous ne devez pas confondre cela avec les blocs d'initialisation d'instance qui sont appelés avant le constructeur par instance.
la source
final is entirely unrelated, it is a way of defining a once only initialization. You can either initialize when defining the variable or within the constructor, nowhere else.
Les deux ne sont vraiment pas similaires.
static
Les champs sont des champs qui n'appartiennent à aucune instance particulière d'une classe .Ici, le
static
champn
n'est associé à aucune instance particulière deC
mais à la classe entière en général (c'est pourquoi ilC.n
peut être utilisé pour y accéder). Pouvez-vous toujours utiliser une instance deC
pour accédern
? Oui, mais ce n'est pas considéré comme une pratique particulièrement bonne.final
d'autre part indique qu'une variable particulière ne peut pas changer après avoir été initialisée.Ici,
n
ne peut pas être réaffecté parce que c'est le casfinal
. Une autre différence est que n'importe quelle variable peut être déclaréefinal
, alors que toutes les variables ne peuvent pas être déclarées statiques.En outre, les classes peuvent être déclarées,
final
ce qui indique qu'elles ne peuvent pas être étendues:De même, les méthodes peuvent être déclarées finales pour indiquer qu'elles ne peuvent pas être remplacées par une classe étendue:
la source
public
classe potentiellement qui définit le fichier) oustatic
les classes internes peuvent définir desstatic
variables. Les autres classes internes sont des instances de la classe externe et ne peuvent pas avoir de variables statiques.final -
1) Lorsque nous appliquons le mot-clé « final » à une variable , la valeur de cette variable reste constante. (ou) Une fois que nous déclarons une variable comme finale, la valeur de cette variable ne peut pas être modifiée.
2) Il est utile lorsqu'une valeur de variable ne change pas pendant la durée de vie d'un programme
statique -
1) lorsque nous appliquons un mot-clé " statique " à une variable , cela signifie qu'il appartient à la classe.
2) Lorsque nous appliquons le mot-clé " statique " à une méthode , cela signifie que la méthode est accessible sans créer d'instance de la classe
la source
static
signifie qu'il n'y a qu'une seule copie de la variable en mémoire partagée par toutes les instances de la classe.Le
final
mot clé signifie simplement que la valeur ne peut pas être modifiée. Sansfinal
, tout objet peut modifier la valeur de la variable.la source
Static et final ont de grandes différences:
Les variables ou classes statiques seront toujours disponibles (à peu près) n'importe où. Final n'est qu'un mot clé qui signifie qu'une variable ne peut pas être modifiée. Donc si avait:
Le programme s'exécutait jusqu'à ce qu'il essaie de changer le "premier" entier, ce qui provoquerait une erreur. En dehors de cette classe, vous n'auriez accès à la "première" variable que si vous aviez instancié la classe. Ceci est en contraste avec "second", qui est disponible tout le temps.
la source
Pensez à un objet comme un haut-parleur. Si Speaker est une classe, il aura différentes variables telles que le volume, les aigus, les graves, la couleur etc. Vous définissez tous ces champs lors de la définition de la classe Speaker. Par exemple, vous avez déclaré le champ de couleur avec un modificateur statique, ce qui signifie que vous dites au compilateur qu'il existe exactement une copie de cette variable, quel que soit le nombre de fois où la classe a été instanciée.
Déclarer
s'assurera que chaque fois que cette classe est instanciée, la valeur du champ de couleur sera "Black" à moins qu'elle ne soit pas modifiée.
Remarque: Maintenant, une fois que vous changez la couleur du haut-parleur comme final, ce code ne s'exécutera pas, car le mot-clé final garantit que la valeur du champ ne change jamais.
Vous pouvez copier / coller ce code directement dans votre émulateur et essayer.
la source
Différence facile,
Final : signifie que la valeur de la variable est finale et qu'elle ne changera nulle part. Si vous dites que x final = 5, cela signifie que x ne peut pas être modifié, sa valeur est définitive pour tout le monde.
Statique: signifie qu'il n'a qu'un seul objet. supposons que vous ayez x = 5, en mémoire il y a x = 5 et son présent à l'intérieur d'une classe. si vous créez un objet ou une instance de la classe, ce qui signifie là une boîte spécifique qui représente cette classe et ses variables et méthodes. et si vous créez un autre objet ou une autre instance de cette classe, cela signifie qu'il y a deux boîtes de cette même classe qui ont des x différents à l'intérieur dans la mémoire. et si vous appelez les deux x dans des positions différentes et modifiez leur valeur, leur valeur sera différente. la boîte 1 a x qui a x = 5 et la boîte 2 a x = 6. mais si vous rendez le x statique, cela signifie qu'il ne peut pas être créé à nouveau. vous pouvez créer un objet de classe mais cet objet n'aura pas de x différent en eux. si x est statique, la case 1 et la case 2 auront toutes deux le même x qui vaut 5. Oui, je peux changer la valeur de statique n'importe où car ce n'est pas définitif. donc si je dis que la boîte 1 a x et que je change sa valeur en x = 5 et après cela je crée une autre boîte qui est box2 et je change la valeur de box2 x en x = 6. alors comme X est statique, les deux boîtes ont le même x. et les deux boîtes donneront la valeur de la boîte à 6 car box2 écrase la valeur de 5 à 6.
Le final et le statique sont totalement différents. La finale qui est définitive ne peut pas être modifiée. statique qui restera comme un mais peut être changé.
"Ceci est un exemple. Rappelez-vous que les variables statiques sont toujours appelées par leur nom de classe. Parce qu'elles ne sont qu'une pour tous les objets de cette classe. Donc la classe A a x = 5, je peux l'appeler et la changer par Ax = 6; "
la source
La statique est quelque chose que tout objet d'une classe peut appeler, qui appartient intrinsèquement à un type d'objet.
Une variable peut être définitive pour une classe entière, ce qui signifie simplement qu'elle ne peut plus être modifiée. Il ne peut être défini qu'une seule fois, et essayer de le définir à nouveau entraînera une erreur. C'est utile pour un certain nombre de raisons, peut-être que vous souhaitez déclarer une constante, qui ne peut pas être modifiée.
Quelques exemples de code:
Wikipedia contient la liste complète des mots-clés java .
la source
Je n'essaierai pas de donner une réponse complète ici. Ma recommandation serait de se concentrer sur la compréhension de ce que chacun d'eux fait et ensuite il devrait être clair de voir que leurs effets sont complètement différents et pourquoi parfois ils sont utilisés ensemble.
static
est pour les membres d'une classe (attributs et méthodes) et il doit être compris par opposition aux membres d'instance (non statiques). Je vous recommande de lire "Comprendre les membres de l'instance et de la classe" dans les didacticiels Java. Je peux aussi être utilisé dansstatic
blocs mais je ne m'inquiéterais pas pour un début.final
a des significations différentes selon qu'il s'applique à des variables, des méthodes, des classes ou d'autres cas. Ici, j'aime mieux les explications de Wikipedia .la source
Les valeurs des variables statiques peuvent être modifiées même si une copie de la variable traverse l'application, tandis que les valeurs des variables finales peuvent être initialisées une fois et ne peuvent pas être modifiées dans toute l'application.
la source