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?
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éé.
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.
Voir la section 'Constantes' pour une explication sur cette page:
http://download.Oracle.com/javase/tutorial/Java/javaOO/classvars.html