SAP NetWeaver AS ABAP Release 750, ©Copyright 2016 SAP AG. Alle Rechte vorbehalten.
ABAP - Schlüsselwortdokumentation →
ABAP - Referenz →
Objekte und Werte erzeugen →
NEW - Instanzierungsoperator
Syntax
... NEW type( ... ) ...
Wirkung
Ein Konstruktorausdruck mit dem Instanzierungsoperator NEW erzeugt ein
anonymes Datenobjekt oder eine
Instanz einer Klasse. Das
Resultat ist eine Referenzvariable, die auf das erzeugte Objekt zeigt. Für type kann angegeben werden:
- Ein nicht-generischer Datentyp dtype.
Der Operator NEW
wirkt wie die Anweisung CREATE
DATA dref TYPE dtype, wobei dref hier für das Resultat steht, das auf das erzeugte anonyme Datenobjekt zeigt. Das Resultat ist eine Datenreferenzvariable vom
statischen Typ dtype. Ein solcher Konstruktorausdruck kann nicht mit einem
Komponentenselektor fortgesetzt werden.
- Eine Klasse class.
Der Operator NEW
wirkt wie die Anweisung CREATE
OBJECT oref TYPE class, wobei oref hier für das Resultat steht, das auf das erzeugte Objekt zeigt. Das Resultat ist eine Objektreferenzvariable vom
statischen Typ class. Ein solcher Konstruktorausdruck kann an
allgemeinen Ausdruckspositionen und
funktionalen Positionen wie eine Objektreferenzvariable
mit einem Objektkomponenten-Selektor -> fortgesetzt und an den gleichen Operandenpositionen verwendet werden. Weiterhin
- kann ein einzelner Ausdruck, der über genau einen nachfolgenden Objektkomponenten-Selektor auf ein Attribut der Klasse zeigt, auch als Zielfeld von Zuweisungen verwendet werden.
- Das Zeichen #.
Wenn der an einer Operandenposition benötigte
Datentyp eindeutig und vollständig erkennbar ist, kann statt einer expliziten Typangabe für type das Zeichen # verwendet werden und es wird der
Operandentyp verwendet.
Wenn der Operandentyp nicht vollständig erkennbar ist, kann das Zeichen # nicht verwendet werden mit folgender Ausnahme: Bei der Konstruktion einer
Struktur oder einer
internen Tabelle kann der Operand hinter BASE ausgewertet werden.
Es gelten die Beschreibungen für die CREATE-Anweisungen. Nach erfolgreicher
Objekterzeugung wird das erzeugte Objekt über die in den Klammern angegebenen Parameter mit Werten
versorgt. Die Syntax der Parameterübergabe hängt vom verwendeten Typ ab, wobei es für komplexe Typen entsprechend spezialisierte Arten der Parameterübergabe gibt.
Bei einer Zuweisung eines Konstruktorausdrucks mit
NEW an eine Referenzvariable werden die Angaben in den Klammern ausgewertet, bevor das erzeugte Objekt an die Zielvariable gebunden wird.
Rückgabewert
Der Instanzierungsoperator NEW setzt sy-subrc bei erfolgreicher Erzeugung der Instanz einer
Klasse auf den Wert 0. Da nicht-klassenbasierte
Ausnahmen des Instanzkonstruktors nicht behandelt werden können, wird sy-subrc
nie auf einen Wert ungleich null gesetzt. Bei der Erzeugung von anonymen Datenobjekten wird der Rückgabewert sy-subrc nicht gesetzt.
Hinweise
- Der Instanzierungsoperator NEW erzeugt immer eine neue temporäre
Referenzvariable, die auf das erzeugte Objekt zeigt. Die Referenzvariable wird als Operand einer Anweisung
verwendet und nach Gebrauch wieder gelöscht. Das Löschen erfolgt bei Abschluss der aktuellen
Anweisung bzw. bei der Auswertung eines relationalen Ausdrucks nach dem Feststellen des Wahrheitswerts.
Das erzeugte Objekt wird dem Garbage Collector übergeben, wenn es nicht nach dem Löschen der temporären Referenzvariable durch eine
Heap-Referenz oder ein Feldsymbol erhalten wird.
- Auch bei einer Zuweisung an eine Referenzvariable
wird stets eine temporäre Referenzvariable erzeugt, die erst abschließend der Zielvariablen
zugewiesen wird. Das Objekt, auf das die Zielvariable vor der Zuweisung zeigt, kann daher im gesamten
Ausdruck über diese angesprochen werden. Hierin unterscheidet sich NEW
vom Wertoperator VALUE.
Beispiel
Erzeugung eines anonymen Datenobjekts vom Typ i mit dem Wert 555 und einer
Instanz einer lokalen Klasse cls, wobei diese implizit aus dem statischen
Typ von oref abgeleitet wird. Die letzte Anweisung könnte in diesem Fall genauso explizit als oref = NEW cls(
) oder dann mit Inline-Deklaration statt mit vorangehender DATA-Anweisung als DATA(oref) = NEW cls( ) geschrieben werden.
CLASS cls DEFINITION.
...
ENDCLASS.
DATA: dref TYPE REF TO data,
oref TYPE REF TO cls.
dref = NEW i( 555 ).
oref = NEW #( ).
Weiterlesen
NEW - Initialwert für alle Typen
NEW - Einzelwert für alle Datentypen
NEW - Strukturen
NEW - interne Tabellen
NEW - Klassen