Constantes
"Amigo, saviez-vous qu'en Java, toutes les variables ne peuvent pas être modifiées ?"
"Comment ça, Kim ? En effet, le mot même "variable" parle de changement."
"Il n'y a aucun doute là-dessus. Comme beaucoup d'autres langages de programmation, Java a des constantes , c'est-à-dire des variables dont les valeurs ne peuvent pas être modifiées . Et le mot même 'constant' parle de constance."
« Et à quoi servent-ils ?
"Habituellement, ils sont utilisés pour une sorte de chose fondamentale comme le nombre Pi
ou le nombre de jours dans les mois de l'année. Cela dit, en principe, un programmeur peut faire de n'importe quelle variable une constante, s'il décide que faire est donc nécessaire."
« Tu veux dire comme un nom, la couleur d'une voiture ou le nom d'un jour de la semaine ?
"Vous avez la bonne idée. Tout ce qui ne devrait pas être changé."
"Et à quoi ressemblent ces constantes en Java ?"
"Java a un mot-clé spécial pour eux : final
. La création d'une variable immuable ressemble à la création d'une variable ordinaire. La seule différence est qu'avant le type de la variable, vous devez écrire le mot final
, comme ceci :
final Type name = value;
"Que se passe-t-il si vous créez une constante et que vous essayez ensuite de lui attribuer une valeur différente ?"
"C'est la bonne question à poser ! Et la bonne réponse est la suivante : si vous essayez d'attribuer une valeur différente à une final
variable, votre programme ne se compilera tout simplement pas."
"Et si vous déclarez une final
variable mais ne lui attribuez pas de valeur ?"
"Cela ne sert à rien de faire cela, donc ce n'est pas non plus autorisé en Java. Une final
variable doit être initialisée lors de sa déclaration, c'est-à-dire que vous devez lui affecter une valeur. Il existe une exception à cette règle : vous pouvez déplacer l'initialisation de une variable de classe statique dans un constructeur, mais vous en saurez plus plus tard.
"Cela dit, tout ce qui est n'est pas final
une constante. Pour réduire le nombre de mots clés, les développeurs Java utilisent le mot final
pour plus que simplement déclarer des constantes. final
peut également s'appliquer aux méthodes et même aux classes. Les méthodes déclarées comme final
ne peuvent pas être remplacées, et une classe déclaré comme final
ne pouvant pas être hérité."
« Euh... Remplacé ? Hérité ? Quelle langue parlez-vous maintenant ? »
"Le langage de la programmation orientée objet. Vous y arriverez très bientôt. D'ici là, profitez simplement de la belle terminologie."
"D'accord. Donc, final
peut être placé avant les variables, les classes et les méthodes, et ce mot-clé les rend immuables dans un certain sens ?"
"Oui. De plus, le final
modificateur peut être ajouté avant toutes les variables : variables locales, paramètres de méthode, champs de classe et variables de classe statiques.
"Voici la chose importante à retenir : final
avant qu'un nom de variable ne soit juste une protection contre toute modification de cette variable . Si une variable stocke une référence à un objet, l'objet peut toujours être modifié."
"Je ne comprends pas très bien."
"Vous comprendrez très bientôt. Voici un exemple :
|
Nous créons un tableau. Ceci n'est pas autorisé : la data variable est déclarée comme final . Mais vous pouvez le faire. Et aussi ceci. |
"Compris. C'est délicat."
Constantes globales
« Que pensez-vous des constantes globales ?
"Je suppose que les constantes globales sont probablement comme des variables globales, uniquement des constantes ?"
"Exactement. Si vous avez besoin de déclarer des constantes globales dans votre programme, créez des variables de classe statiques et faites-les public
et final
. Il existe un style spécial pour les noms de ces variables : elles sont écrites en lettres majuscules, avec un caractère de soulignement utilisé pour mots séparés.
Exemples:
class Solution
{
public static final String SOURCE_ROOT = "c:\\projects\\my\\";
public static final int DISPLAY_WIDTH = 1024;
public static final int DISPLAY_HEIGHT = 768;
}
Ombrage variable
"Comme je l'ai déjà dit, vous ne pouvez pas créer plusieurs variables locales avec les mêmes noms dans une seule méthode. Dans différentes méthodes, vous le pouvez."
"Je sais que!"
"Mais ce que vous ne savez probablement pas, c'est que les variables d'une classe et les variables locales d'une méthode peuvent très bien avoir le même nom.
Exemple:
Code | Visibilité variable |
---|---|
|
|
"Dans la add
méthode, nous avons déclaré une variable locale nommée sum
. Jusqu'à la fin de la méthode, elle masque (ou masque ) la sum
variable d'instance."
"Hmm... Je dirais que dans un certain sens, c'est le comportement attendu."
"Mais ce n'est pas la fin de l'histoire. Il s'avère que si une variable d'instance est masquée par une variable locale, il existe toujours un moyen de faire référence à la variable d'instance dans la méthode. Nous le faisons en écrivant le mot-clé avant son this
nom :
this.name
"Voici un exemple où le conflit de nom est résolu avec succès :
Code | Visibilité variable |
---|---|
|
|
Les variables count
et sum
sont disponibles partout avec ou sans le this
mot-clé. Sur les lignes où la sum
variable locale masque la sum
variable d'instance, la sum
variable d'instance n'est accessible qu'à l'aide du this
mot-clé.
"De toute évidence, je vais devoir m'entraîner."
« Vous vous débrouillerez.
"Que se passe-t-il si une variable de classe statique est masquée plutôt qu'une simple variable d'instance (non statique) ? Vous ne pouvez pas y accéder viathis
?"
"C'est vrai. Le mot clé this ne fonctionnera pas. Vous devez vous y référer via le nom de la classe :
ClassName.name
Exemple:
Code | Visibilité variable |
---|---|
|
|
"Attention : vous pouvez accéder aux variables statiques count
et sum
partout avec ou sans utiliser le nom de la classe Solution
comme préfixe. Dans les lignes où la sum
variable locale masque la sum
variable d'instance, l'accès à la sum
variable de classe n'est possible que lorsqu'elle est utilisée Solution
comme préfixe.
Variables à l'intérieur d'une for
boucle
"Et encore un petit fait intéressant. Il y a aussi un endroit où une variable est déclarée d'une manière spéciale - je parle de l'intérieur d'une for
boucle ." Typiquement, une for
boucle a une counter
variable entre parenthèses. Et quelle sera la visibilité de cette variable ? Après tout, ce n'est pas dans le corps de la boucle. Est-ce toute la méthode ? Ou non?"
"J'ai déjà entendu quelque chose à ce sujet. Si je comprends bien, une variable déclarée dans l'en-tête d'une for
boucle n'est visible que dans le corps de la boucle et dans l' en-tête de la for
boucle ."
"Bravo, Amigo. Mais quand même, jetez un œil à un exemple pour renforcer ce matériel :
Code | Visibilité variable |
---|---|
|
|
"Donc vous dites que dans mon code je pourrais écrire plusieurs boucles les unes après les autres avec une variable compteur du même nom, et qu'il n'y aura pas de problèmes ?"
"Il n'y aurait aucun problème. Tenez, regardez :
Code | Visibilité variable |
---|---|
|
|
GO TO FULL VERSION