Wie Sie wissen, liefert eine Klasse die Blaupause für Objekte. Sie erstellen ein Objekt aus einer Klasse. Jede der folgenden Anweisungen aus dem Programm CreateObjectDemo
erstellt ein Objekt und weist es einer Variablen zu:
In der ersten Zeile wird ein Objekt der Point
-Klasse und die zweite und dritte Zeile erstellen jeweils ein Objekt der Rectangle
-Klasse.
Jede dieser Anweisungen besteht aus drei Teilen (wird unten ausführlich erläutert):
- Deklaration: Der fettgedruckte Code sind alle Variablendeklarationen, die einem Objekttyp einen Variablennamen zuordnen.
- Instanziierung: Das neue Schlüsselwort ist ein Java-Operator, der das Objekt erstellt.
- Initialisierung: Auf den neuen Operator folgt ein Aufruf eines Konstruktors, der das neue Objekt initialisiert.
Deklarieren einer Variablen Verweisen auf ein Objekt
Zuvor haben Sie gelernt, dass Sie zum Deklarieren einer Variablen Folgendes schreiben:
type name;
Dies benachrichtigt den Compiler, dass Sie den Namen verwenden, um auf Daten zu verweisen, deren Typ Typ ist. Bei einer primitiven Variablen reserviert diese Deklaration auch die richtige Speichermenge für die Variable.
Sie können eine Referenzvariable auch in einer eigenen Zeile deklarieren. Beispiel:
Point originOne;
Wenn Sie originOne
so deklarieren, wird der Wert angezeigt unbestimmt sein, bis ein Objekt tatsächlich erstellt und ihm zugewiesen wird. Durch einfaches Deklarieren einer Referenzvariablen wird kein Objekt erstellt. Dazu müssen Sie den Operator new
verwenden, wie im nächsten Abschnitt beschrieben. Sie müssen originOne
ein Objekt zuweisen, bevor Sie es in Ihrem Code verwenden. Andernfalls wird ein Compilerfehler angezeigt.
Eine Variable in diesem Status, die derzeit auf kein Objekt verweist, kann wie folgt dargestellt werden (der Variablenname originOne
, plus eine Referenz, die auf nichts verweist):
Instanziieren einer Klasse
Der neue Operator instanziiert eine Klasse, indem er einem neuen Objekt Speicher zuweist und einen Verweis auf diesen Speicher zurückgibt. Der neue Operator ruft auch den Objektkonstruktor auf.
Der neue Operator erfordert ein einzelnes Postfix-Argument: einen Aufruf eines Konstruktors. Der Name des Konstruktors gibt den Namen der zu instanziierenden Klasse an.
Der neue Operator gibt einen Verweis auf das von ihm erstellte Objekt zurück. Diese Referenz wird normalerweise einer Variablen des entsprechenden Typs zugewiesen, z. B.:
Die vom neuen Operator zurückgegebene Referenz nicht müssen einer Variablen zugeordnet werden. Es kann auch direkt in einem Ausdruck verwendet werden. Beispiel:
int height = new Rectangle().height;
Diese Anweisung wird im nächsten Abschnitt erläutert.
Initialisieren eines Objekts
Hier ist der Code für die Point-Klasse:
public class Point { public int x = 0; public int y = 0; //constructor public Point(int a, int b) { x = a; y = b; }}
Diese Klasse enthält einen einzelnen Konstruktor. Sie können einen Konstruktor erkennen, da seine Deklaration denselben Namen wie die Klasse verwendet und keinen Rückgabetyp hat. Der Konstruktor in der Point-Klasse akzeptiert zwei ganzzahlige Argumente, wie vom Code deklariert (int a, int b) Die folgende Anweisung enthält 23 und 94 als Werte für diese Argumente:
Point originOne = new Point(23, 94);
Das Ergebnis der Ausführung Die Anweisung kann in der nächsten Abbildung dargestellt werden:
Hier ist der Code für die Rectangle-Klasse, die vier Konstruktoren enthält:
Mit jedem Konstruktor können Sie Anfangswerte für den Ursprung, die Breite und die Höhe des Rechtecks angeben, wobei Sie sowohl primitive als auch Referenztypen verwenden. Wenn eine Klasse mehrere Konstruktoren hat, müssen sie unterschiedliche Signaturen haben. Der Java-Compiler unterscheidet t Die Konstruktoren basieren auf der Anzahl und dem Typ der Argumente. Wenn der Java-Compiler auf den folgenden Code stößt, kann er den Konstruktor in der Rectangle-Klasse aufrufen, für den ein Point-Argument gefolgt von zwei ganzzahligen Argumenten erforderlich ist:
Rectangle rectOne = new Rectangle(originOne, 100, 200);
Dies ruft einen der Konstruktoren von Rectangle
auf, der origin
mit originOne
. Außerdem setzt der Konstruktor width
auf 100 und height
auf 200.Jetzt gibt es zwei Verweise auf dasselbe Point-Objekt – ein Objekt kann mehrere Verweise darauf haben, wie in der nächsten Abbildung gezeigt:
Die folgende Codezeile ruft den Konstruktor Rectangle
auf, für den zwei ganzzahlige Argumente erforderlich sind, die die Initiale bereitstellen Werte für Breite und Höhe. Wenn Sie den Code im Konstruktor überprüfen, werden Sie feststellen, dass ein neues Point-Objekt erstellt wird, dessen x- und y-Werte auf 0 initialisiert werden:
Rectangle rectTwo = new Rectangle(50, 100);
Der in der folgenden Anweisung verwendete Rechteckkonstruktor akzeptiert keine Argumente, daher wird er als Konstruktor ohne Argumente bezeichnet:
Rectangle rect = new Rectangle();
Alle Klassen haben mindestens einen Konstruktor. Wenn eine Klasse keine explizit deklariert, stellt der Java-Compiler automatisch einen Konstruktor ohne Argumente bereit, der als Standardkonstruktor bezeichnet wird. Dieser Standardkonstruktor ruft den Konstruktor ohne Argumente des übergeordneten Klassenelements oder den Konstruktor Object
auf, wenn die Klasse kein anderes übergeordnetes Element hat. Wenn das übergeordnete Element keinen Konstruktor hat (Object
hat eine), der Compiler lehnt das Programm ab.