Objektvariablen enthalten Referenzen auf Objekte. Sie unterscheiden sich von Variablen primitiver Datentypen in einer Reihe von Eigenschaften:
Variablen primitiver Datentypen | Objektvariablen | |
---|---|---|
Initialisierung | Standardwert des Typs; direkt benutzbar | Null Zeiger, Objekt muss separat erzeugt werden |
Exklusivität | Variable gehört exklusiv zum Objekt | referenziertes Objekt gehört nicht exklusiv zum umgebenden Objekt |
Lebensdauer | die des umgebenden Objekts | referenziertes Objekt existiert so lange es von irgendeiner Referenz referenziert wird |
Ausnahmebehandlung | nicht relevant | Der Versuch eine Methode oder Objektvariable mit einer Referenz auf null zu benutzen führt zu einer Ausnahme |
Parameterübergabe bei Methoden | Kopie wird angelegt | Objekt wird nicht kopiert. Nur Referenz wird kopiert |
Neue Objekte werden im Adressraum nur mit dem new() Operator angelegt. Referenzen speichern nur die eindeutige Identität unter der das Objekt zu erreichen ist. Die in der Referenz verwaltete eindeutige Objektidentität bleibt für die gesamte Lebensdauer des Objekts konstant. Sie ist eine logische Kennung. Das unten aufgeführte Programmbeispiel mit Diagramm ist jedoch nur als Gedankenmodell zu verstehen. Die konkrete Implementierung in einer virtuellen Java Maschine kann durchaus anders aussehen. Sie ist für den Javaentwickler transparent. Kraftwagen wagen1 = new Kraftwagen ("0-1"); Kraftwagen wagen2 = wagen1; Kraftwagen wagen3 = new Kraftwagen("0-2"); Das Referenzkonzept von Java ist die einzige Möglichkeit auf Objekte zuzugreifen. Das Referenzenkonzept von Java ist syntaktisch sehr ähnlich zu dem Pointerkonzept von C und C++. Es gibt jedoch wichtige Unterschiede mit signifikanten Auswirkungen auf die Stabilität der Anwendungen: |
Java | C/C++ | |
---|---|---|
Begriff | Referenz (Reference) | Zeiger (Pointer) |
Implementierung | abstrakter Datentyp (Klasse) | Speicherbereich |
direkter Speicherzugriff | nein | ja |
Typcheck zum Übersetzungszeitpunkt | ja | ja (Normalerweise) |
Zugriffskontrolle auf eine nicht initialisierte Referenz | Check mit eventuellem Wurf einer behandelbaren Ausnahme | kein Check auf Existenz oder Gültigkeit des Objekts |
Bemerkung: Der neue C++11 Standard bietet viele Verbesserungen dieser historisch bedingten Defizite von C/C++. Da C++ oft für Anwendungen deren Leistung sehr wichtig ist (Systemprogrammierung) benutzt wird, sind alle zusätzlichen Checks von C++11 immer nur optional.
- Printer-friendly version
- Log in to post comments
- 10280 views