Der Unterschied zwischen Instanzvariablen und Klassenvariablen war nicht eindeutig, daher habe ich sie für die Zukunft zusammengefasst. Ich hoffe, es hilft.
Es ist eine Variable, die zu jeder Instanz gehört. Insbesondere sichert das Schlüsselwort ** new ** den Bereich der Instanzvariablen (Instanz), und die Anfangswertzuweisung und der Konstruktor (Prozess, der beim Erstellen der Instanz ausgeführt wird) initialisieren die Instanzvariable. Beachten Sie, dass die erstellten Instanzen als separat erkannt werden, sodass der Wert der Instanzvariablen für jede Instanz unterschiedlich ist. Daher wird es verwendet, wenn Sie für jedes Objekt (Klasseninstanz) unterschiedliche Informationen verarbeiten möchten.
Es ist eine Variable, die mit dem Schlüsselwort ** static deklariert ist ** und eine gemeinsame Information ist, die von allen Instanzen gemeinsam genutzt wird. Das Ändern des Werts einer Klassenvariablen von einem Objekt wirkt sich auf alle anderen Objekte aus. Daher wird es verwendet, wenn Sie Informationen verarbeiten möchten, die dem gesamten Objekt gemeinsam sind.
Wenn zwischen Klassen eine Vererbungsbeziehung besteht, können Klassenvariablen für jede geerbte Klasse denselben Namen haben, und alle geerbten Klassen werden verfolgt und der zuerst erreichte Wert wird verwendet. Selbst wenn Klassenvariablen denselben Namen haben, können sich ihre Werte daher je nach referenzierender Klasse unterscheiden. (Fügen Sie hier ein konkretes Beispiel zu 5 hinzu.)
Instanzvariable | Klassenvariable | |
---|---|---|
Charakteristisch | Für jedes erstellte Objekt wird ein Instanzvariablenbereich gesichert. Daher ist der Wert für jedes Objekt unterschiedlich. | Für alle Objekte wird nur eine pro Klasse erstellte und gemeinsame Werte verwendet |
Lebenszeit | Ab dem Zeitpunkt, an dem ein Objekt erstellt wird, bis es verschwindet | Vom Programmstart bis zum Ende |
Wie rufe ich an? | Variable, der das Objekt zugeordnet ist.Instanzvariable | 1.Name der Klasse.Klassenvariable 2.Variable, der das Objekt zugeordnet ist.Instanzvariable |
Erklärung | Variablenname des Zugriffsmodifizierertyps | Zugriffsmodifikatorstatisches SchlüsselwortGeben Sie den Variablennamen ein |
Einflussbereich zum Zeitpunkt der Änderung | Nur Objekte, die Instanzvariablen zugeordnet sind | Alle Objekte |
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;
}
Ausgabeergebnis
10
20
Ich habe also unterschiedliche Werte für die Instanzvariablen jedes Objekts festgelegt Infolgedessen werden unterschiedliche Werte ausgegeben.
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;
}
}
Ausgabeergebnis
40
40
Klassenvariablen haben für alle Instanzen einen gemeinsamen Wert Weil Änderungen an einem Objekt andere Objekte betreffen Infolgedessen wird der letzte Satz "40" als Wert der Klassenvariablen ausgegeben.
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;
}
Ausgabeergebnis
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