Objekt
In Java gibt es zwei Arten von Typen: primitive Typen und Objekttypen. Primitives wie int
und boolean
beginnen mit Kleinbuchstaben; Objekttypen beginnen mit Großbuchstaben. Diese Unterscheidung ist nützlich, da sie uns einige der Unterschiede zwischen ihnen in Erinnerung bringt:
Wenn Sie eine primitive Variable deklarieren, erhalten Sie Speicherplatz für einen primitiven Wert. Wenn Sie eine Objektvariable deklarieren, erhalten Sie einen Speicherplatz für eine Referenz auf ein Objekt. Um Speicherplatz für das Objekt selbst zu erhalten, müssen Sie den new
-Operator verwenden.
Wenn Sie eine primitive Variable nicht initialisieren, wird ihr ein Standardwert zugewiesen, der von ihrem Typ abhängt. Beispielsweise 0
für int
und false
für boolean
. Der Standardwert für Objekttypen ist null
, was angibt, dass kein Objekt von den Referenzvariablen referenziert wird.
Primitive Variablen sind gut isoliert, in dem Sinne, dass Sie nichts tun können, was in einer Methode einen Effekt auf eine Variable in einer anderen Methode hat. Objektvariablen können schwierig zu verwenden sein, da sie nicht so gut isoliert sind. Wenn Sie eine Referenz auf ein Objekt als Argument übergeben, kann die Methode, die Sie aufrufen, das Objekt modifizieren, und Sie werden dann den Effekt sehen. Natürlich kann das auch ein gutes Ding sein, aber Sie müssen sich dessen bewusst sein.
Wenn wir primitive Variablen an eine Methode übergeben (Parameterübergabe per Wert), kopieren wir tatsächlich die Werte der Primitives und verwenden die Kopien innerhalb der Methode. Alle Operationen innerhalb der Methode arbeiten auf den Kopien; und außerhalb der Methode bleiben die Werte der primitiven Variablen unberührt. Wenn wir jedoch nicht-primitive Objekte an eine Methode übergeben (Parameterübergabe per Referenz), übergeben wir die Referenzvariablen an die Methode. Alle Operationen werden tatsächlich die ursprünglichen Objekte verwenden und/oder beeinflussen.
Beispiel:
Schreiben Sie folgenden Code in die Datei /home/labex/project/objectTest.java
:
public class objectTest {
public static void main(String[] args){
// verwenden Sie new, um ein Arrayobjekt mit zwei Elementen zu erstellen
int[] numbers = new int[2];
// weisen Sie Werten an das Arrayobjekt zu
numbers[0] = 1;
numbers[1] = 2;
// erstellen Sie primitive Variablen auf diese Weise
int a = 1, b = 2;
// erstellen Sie ein Testobjekt
objectTest test = new objectTest();
test.changeInt(a, b);
System.out.println("Now a is " + a + ", b is " + b);
test.changeArray(numbers);
System.out.println("Now numbers contain:");
for(int i : numbers){
System.out.print(i + "\t");
}
}
// definieren Sie eine Objektmethode, um int-Werte zu ändern
public void changeInt(int a,int b){
a = 2;
b = 3;
System.out.println("In changeInt method, a is " + a + ", b is " + b);
}
// definieren Sie eine Objektmethode, um Arraywerte zu ändern
public void changeArray(int[] number){
for(int i = 0;i < number.length;i++){
number[i] = number[i]+1; // ändern Sie den Wert des Arrayelements um 1 erhöhen
}
System.out.println("In changeArray method, numbers contain:");
for(int i : number){
System.out.print(i + "\t");
}
System.out.println();
}
}
Ausgabe:
Führen Sie die Datei objectTest.java
im Terminal mit dem folgenden Befehl aus:
javac /home/labex/project/objectTest.java
java objectTest
Sehen Sie sich die Ausgabe an:
In changeInt method, a is 2, b is 3
Now a is 1, b is 2
In changeArray method, numbers contain:
2 3
Now numbers contain:
2 3
Es gibt noch einen anderen Unterschied zwischen Primitiven und Objekttypen. Sie können keine neuen Primitiven zu Java hinzufügen (es sei denn, Sie befinden sich auf dem Standardsausschuss), aber Sie können neue Objekttypen erstellen! Wir werden sehen, wie das im nächsten Kapitel geht.