web-dev-qa-db-fra.com

final et statique dans Java

J'ai lu cette phrase dans un livre mais je ne l'ai pas comprise:

Un champ qui est à la fois statique et final n'a qu'un seul élément de stockage qui ne peut pas être modifié.

Quelqu'un peut-il l'expliquer pour moi?

25
Ruba

La source de votre confusion peut être que le mot "statique" en anglais et sa signification en Java ne sont que vaguement liés.

Une variable définie dans une classe Cat de manière "normale" peut être appelée variable d'instance.

class Cat {
   int weight;
}

Chaque fois que vous créez un nouvel objet de type Cat, vous créez une nouvelle copie de la variable 'weight'. Si vous créez 10 objets de type Cat, chacun a sa propre copie de la variable de poids.

Une variable "statique" peut être considérée comme une variable de niveau classe, par opposition à une variable d'instance. Une variable statique n'a qu'une seule copie et appartient à la classe Cat elle-même, plutôt qu'il n'y ait une copie pour chaque objet de type Cat.

class Cat {
   static String speciesName;

   int weight;
}

Ici, peu importe le nombre d'objets de type Cat que nous créons, il n'y a qu'une seule copie de speciesName.

Si la variable statique est également "finale", cette seule copie de la variable est le seul élément de stockage qui ne peut pas être modifié. Si la variable "poids" était définitive dans l'exemple ci-dessus, il y aurait 10 pièces de stockage qui ne pourraient pas être modifiées - une pour chaque objet de type Cat que nous avions créé.

52
Mike Edwards

Une variable static est commune à toutes les instances de la classe. Une variable final ne peut pas changer après avoir été définie pour la première fois.

Donc un static final variable dans Java est commun à toutes les instances de la classe, et il ne peut pas être modifié après avoir été défini la première fois.

class Car {

    static final int numberOfWheels = 4;
    Color color;

    public Car(Color color) {
        this.color = color;
    }
}

Car redCar = new Car(Red);
Car blueCar = new Car(Blue);

Chaque voiture a maintenant une propriété individuelle et variable color et ils partagent la propriété numberOfWheels qui ne peut pas être modifiée.

26
Jonas
  • Final signifie qu'il ne peut pas réattribuer de valeur à une variable
  • Statique signifie qu'une seule copie de référence peut être au total dans la classe de toutes les méthodes.
1
Vishwa

Voir la section 'Constantes' pour une explication sur cette page:

http://download.Oracle.com/javase/tutorial/Java/javaOO/classvars.html

1
rmk