La différence entre les variables d'instance et les variables de classe était ambiguë, je les ai donc résumées pour l'avenir. J'espère que cela aide.
C'est une variable qui appartient à chaque instance. Plus précisément, le ** nouveau mot-clé ** sécurise la zone de variable d'instance (instance), et l'affectation de valeur initiale et le constructeur (processus exécuté lors de la création de l'instance) initialisent la variable d'instance. Notez que les instances créées sont reconnues comme distinctes, de sorte que la valeur de la variable d'instance sera différente pour chaque instance. Par conséquent, il est utilisé lorsque vous souhaitez gérer des informations différentes pour chaque objet (instance de classe).
Il s'agit d'une variable déclarée avec le ** mot-clé statique ** et il s'agit d'informations communes partagées par toutes les instances. La modification de la valeur d'une variable de classe à partir d'un objet affecte tous les autres objets. Par conséquent, il est utilisé lorsque vous souhaitez gérer des informations communes à l'ensemble de l'objet.
S'il existe une relation d'héritage entre les classes, les variables de classe peuvent avoir le même nom pour chaque classe héritée, et toutes les classes héritées sont tracées et la valeur qui est atteinte en premier est utilisée. Par conséquent, même si les variables de classe ont le même nom, leurs valeurs peuvent différer selon la classe de référence. (Ajoutez ici un exemple concret à 5.)
Variable d'instance | Variable de classe | |
---|---|---|
Fonctionnalité | Une zone de variable d'instance est sécurisée pour chaque objet créé. Par conséquent, la valeur est différente pour chaque objet. | Un seul créé par classe et des valeurs communes sont utilisées pour tous les objets |
Durée de vie | À partir du moment où un objet est créé jusqu'à sa disparition | Du début à la fin du programme |
Comment appeler | Variable à laquelle l'objet est affecté.Variable d'instance | 1.nom de la classe.Variable de classe 2.Variable à laquelle l'objet est affecté.Variable d'instance |
Déclaration | Nom de la variable de type de modificateur d'accès | Modificateur d'accèsmot-clé statiqueSaisissez le nom de la variable |
Plage d'influence au moment du changement | Uniquement les objets associés aux variables d'instance | Tous les objets |
Main.java
public class Main {
public static void main(String[] args) {
Sample sampleA = new Sample();
Sample sampleB = new Sample();
sampleA.a = 10;
sampleB.a = 20;
System.out.println(sampleA.a);
System.out.println(sampleB.a);
}
}
public class Sample {
public int a;
}
Résultat de sortie
10
20
J'ai défini des valeurs différentes pour les variables d'instance de chaque objet, donc En conséquence, différentes valeurs sont émises.
Main.java
public class Main {
public static void main(String[] args) {
Sample sampleA = new Sample();
Sample sampleB = new Sample();
sampleA.setNum(30);
sampleB.setNum(40);
System.out.println(sampleA.getNum());
System.out.println(sampleB.getNum());
}
}
public class Sample {
public static int b;
public void setNum(int value) {
b = value;
}
public int getNum() {
return b;
}
}
Résultat de sortie
40
40
Les variables de classe partagent une valeur commune dans toutes les instances Parce que les modifications apportées à un objet affectent d'autres objets En conséquence, le dernier ensemble «40» est affiché comme valeur de la variable de classe.
Main.java
public class Main {
public static void main(String[] args) {
var s1 = new Sample();
var s2 = new Sample();
System.out.println("Base: " + Base.a + ", " + Base.b);
System.out.println("Sample: " + Sample.a + ", " + Sample.b);
System.out.println("s1: " + s1.a + ", " + s1.b);
System.out.println("s2: " + s2.a + ", " + s2.b);
Base.a = 10;
Sample.a = 20;
s1.a = 30;
s2.a = 40;
System.out.println("Base: " + Base.a + ", " + Base.b);
System.out.println("Sample: " + Sample.a + ", " + Sample.b);
System.out.println("s1: " + s1.a + ", " + s1.b);
System.out.println("s2: " + s2.a + ", " + s2.b);
Base.b = 100;
Sample.b = 999;
System.out.println("Base: " + Base.a + ", " + Base.b);
System.out.println("Sample: " + Sample.a + ", " + Sample.b);
System.out.println("s1: " + s1.a + ", " + s1.b);
System.out.println("s2: " + s2.a + ", " + s2.b);
}
}
class Base {
static int a = 0;
static int b = 1;
}
class Sample extends Base {
static int b = 2;
}
Résultat de sortie
Base: 0, 1
Sample: 0, 2
s1: 0, 2
s2: 0, 2
Base: 40, 1
Sample: 40, 2
s1: 40, 2
s2: 40, 2
Base: 40, 100
Sample: 40, 999
s1: 40, 999
s2: 40, 999
SOFTWARE ENGINEERING [tutorialspoint] (https://www.tutorialspoint.com/What-is-the-difference-between-class-variables-and-instance-variables-in-Java)
Recommended Posts