Show TOC

ZeigerLocate this document in the navigation structure

Zeiger (d.h. Datenobjekte, deren Inhalt auf andere Objekte zeigt) sind in ABAP durch Feldsymbole und Referenzvariablen realisiert.

Feldsymbole

Ein Feldsymbol ist ein mit der Anweisung FIELD-SYMBOLS oder inline mit dem Operator FIELD-SYMBOL( ... ) deklarierter symbolischer Name, dem zur Programmlaufzeit mit der Anweisung ASSIGN oder ähnlichen Zusätzen ein physischer Speicherbereich zugewiesen wird. Bei der Zuweisung wird der Datentyp festgelegt, mit dem der Speicherbereich behandelt wird (Casting). Ein Feldsymbol ist wie ein Datenobjekt an beliebigen Operandenpositionen verwendbar, wobei mit dem Inhalt des referierten Speicherbereichs gearbeitet wird (Wertesemantik).

Beispiel

Zuweisung des Speicherbereichs eines Textfelds text an ein Feldsymbol <hex>, wobei ein Casting auf den Typ des Feldsymbols durchgeführt wird. Die spitzen Klammern sind vorgeschriebener Bestandteil des Namens.

               DATA text TYPE c LENGTH 10 VALUE 'Hallo!'.

FIELD-SYMBOLS <hex> TYPE x.

ASSIGN text TO <hex> CASTING.

WRITE <hex>.
            

Referenzvariable

Eine Referenzvariable ist ein Datenobjekt, das eine Referenz enthält. Es gibt Daten und Objektreferenzvariablen. Der statische Typ einer Referenzvariable (Datentyp, Klasse, Interface) legt fest, auf welche Objekte sie zeigen kann. Referenzvariablen sind die Voraussetzung für Instanzierungen mit CREATE DATA bzw. CREATE OBJECT oder dem Konstruktoroperator NEW( … ). Bei Zuweisungen zwischen Referenzvariablen wird die Referenz kopiert (Referenzsemantik). Der Zugriff auf eine Komponente erfolgt über oref->comp. Mit CREATE DATA erzeugte Datenobjekte werden als anonyme Datenobjekte bezeichnet, da sie nur über Datenreferenzvariablen angesprochen werden können.

Mit CREATE oder NEW( ... ) erzeugte Daten- oder Klassenobjekte können nicht explizit wieder gelöscht werden. Statt dessen werden die zugehörigen Referenzvariablen mit CLEAR zurückgesetzt. Der Garbage Collector entfernt nicht mehr referenzierte Objekte automatisch. Mittels der Systemklasse cl_abap_weak_reference können schwache Objektreferenzen erzeugt werden. Klassenobjekte, die nur noch durch schwache Objektreferenzen referenziert werden, können ebenfalls durch den Garbage Collector entfernt werden.

Beispiel

Deklaration einer Datenreferenzvariablen dref und Erzeugung eines anonymen Datenobjekts vom Typ i. Die Erzeugung mit CREATE und NEW( ... ) ist gleichwertig. Adressierung des Datenobjekts durch Dereferenzierung mit dem Operator ->*.

               DATA dref TYPE REF TO i.

CREATE DATA dref.
dref = NEW #( ).

dref->* = 111.