1. Constantes

De nombreux autres langages de programmation ont des constantes , c'est-à-dire des variables dont les valeurs ne peuvent pas être modifiées . Habituellement, ils sont utilisés pour une sorte de chose fondamentale comme le nombre Piou 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 ou elle décide que cela est nécessaire.

Alors, comment déclarer une variable immuable (constante) en Java ? Il existe un mot-clé spécial pour cela : 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;

Si vous essayez d'attribuer une valeur différente à une finalvariable, votre programme ne sera tout simplement pas compilé.

Une finalvariable doit être initialisée (une valeur doit lui être affectée) lors de sa déclaration. Il existe une exception à cette règle : vous pouvez déplacer l'initialisation d'une variable de classe statique dans un constructeur. Mais vous apprendrez cela au niveau 10 .

Pour réduire le nombre de mots-clés, les développeurs Java utilisent le mot finalpour plus que simplement déclarer des constantes. finalpeut également s'appliquer aux méthodes et même aux classes. Les méthodes déclarées comme finalne peuvent pas être remplacées et une classe déclarée comme finalne peut pas être héritée.

Le finalmodificateur peut être ajouté avant toutes les variables : variables locales, paramètres de méthode, champs de classe et variables de classe statiques.

Notez qu'avant finalun nom de variable est 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é.

Exemple:

final int[] data = {1, 2, 3, 4, 5, 6};

data = {6, 7, 8, 9};

data[0] = 0;
data[1] = 0;
data[2] = 0;
Nous créons un tableau.

Ceci n'est pas autorisé : la datavariable est déclarée comme final.

Mais vous pouvez le faire.
Et aussi ceci.

Constantes globales

Si vous décidez de déclarer des constantes globales dans votre programme, vous devez alors créer des variables de classe statiques et les transformer publicen et final. Il existe un style spécial pour les noms de ces variables : ils sont écrits en lettres majuscules, avec un caractère de soulignement utilisé pour séparer les mots.

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;
}


2. Ombrage variable

Comme nous l'avons dit précédemment, vous ne pouvez pas créer plusieurs variables locales avec le même nom dans la même méthode. Dans différentes méthodes, vous pouvez.

Mais voici ce que vous ne savez probablement pas : les variables d'instance et les variables de méthode locales peuvent avoir le même nom.

Exemple:

Code Visibilité variable
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     sum = sum + data;
     int sum = data * 2;
     count++;
   }
}


count
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum, data
count, sum

Dans la addméthode, nous avons déclaré une variable locale nommée sum. Jusqu'à la fin de la méthode, il occulte (ou masque ) la sumvariable d'instance.

D'accord, dites-vous, c'est à prévoir dans un certain sens. 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 faisons cela en écrivant le thismot-clé avant son nom :

this.name

Voici un exemple où le conflit de nom est résolu avec succès :

Code Visibilité variable
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     int sum = data * 2;
     this.sum = this.sum + data;
     count++;
   }
}


this.count
this.count, this.sum
this.count, this.sum
this.count, this.sum
this.count, this.sum, data
this.count, this.sum, data, sum
this.count, this.sum, data, sum
this.count, this.sum, data, sum
this.count, this.sum

Les variables count et sum sont disponibles partout avec ou sans le thismot clé. Sur les lignes où la sum variable locale masque la sumvariable d'instance, la sum variable d'instance n'est accessible qu'à l'aide du thismot-clé.

Si une variable de classe statique plutôt qu'une variable d'instance est masquée, vous devez y accéder via le nom de la classe plutôt que le thismot-clé :

ClassName.name

Exemple:

Code Visibilité variable
public class Solution
{
   public static int count = 0;
   public static int sum = 0;

   public void add(int data)
   {
     int sum = data * 2;
     Solution.sum = Solution.sum + data;
     count++;
   }
}

Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum, data
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum

Vous pouvez accéder aux variables statiques count et sum partout avec ou sans utiliser le nom de la classe Solutioncomme préfixe. Dans les lignes où la sumvariable locale masque la sumvariable d'instance, l'accès à la sum variable d'instance n'est possible que lorsqu'elle est utilisée Solutioncomme préfixe.



3. Variables à l'intérieur d'une forboucle

Et un autre fait petit mais intéressant.

Il y a aussi un endroit où une variable est déclarée d'une manière spéciale — à l'intérieur d'une forboucle .

Vous vous souviendrez peut-être qu'une forboucle a généralement une variable de compteur 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?

La bonne réponse est : une variable déclarée dans l'en-tête d'une forboucle n'est visible que dans le corps de la boucle et dans l' en-tête de la forboucle .

Exemple:

Code Visibilité variable
public static void main(String[] args)
{
   int a = 0;

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   System.out.println("end");
}


a
a
a, i
a, i
a, i
a
a
a

Ainsi, vous pouvez toujours écrire des boucles les unes après les autres dans votre code et utiliser des variables de compteur portant le même nom - cela ne créera aucun problème.

Exemple:

Code Visibilité variable
public static void main(String[] args)
{
   int a = 0;

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   System.out.println("end");
}


a
a
a, i
a, i
a, i
a
a
a, i
a, i
a, i
a
a
a