vytvorí objekt
Jasmin Syntax
new <class>
<class> je meno triedy ktorá sa používa napríklad java/lang/String.
Zásobník
Pred |
Po |
... |
objectref |
|
... |
Popis
new sa
používa na vytvorenie inštancie objektu
New zaberá jednoduchý parameter, <class>,meno triedy
objektu ktorý chce vytvoriť. Potom new určí veľkosť v
bajtoch danej triedy a alokuje pamäť pre novú inštanciu z haldy garbage
kolektora. Poľia inštancie sú nastavené
na počiatočnú hodnotu 0 (pre polia dané číslom a poľia boolov), alebo null (pre odkaz na
poľia). Nasledujúca, referencia k novému objektu sa vloží do zásobníka.
Všimnite si, že nový objekt sa
inicializuje neinicializovaný - predtým ako nový objekt môže byť použítý, jedna
z jeho <init> metód musí byť volaná použitím invokespecial, viď príklad nižšie.
Príklad
; Tetno príklad vytvorí nový objekt StringBuffer.
;
; StringBuffer x = new StringBuffer();
; 1. použije sa new na vytvorenie novej referencie na objekt new java/lang/StringBuffer
; 2. dup objekt a zavolá jeho konštruktor
dup
invokespecial java/lang/StringBuffer/<init>()V
; 3. odstúpi referenciu na objekt zo zásobníka do lokálnej premennej
astore_1
; lokálna premenná 1 teraz obsahuje objekt StringBuffer,
; pripravené pre pužitie
; nasledujúci príklad ukazuje ako zavolať neštandardný konštruktor
;
; StringBuffer x = new StringBuffer(100);
new java/lang/StringBuffer
dup
bipush 100
invokespecial java/lang/StringBuffer/<init>(I)V
astore_1
Výnimky
OutOfMemoryError – nedostatok pamäte pre alokovanie novej inštancie
InstantiationError
– Trieda pomenovaná pomocou <type> je abstraktná trieda alebo innterface
Bajtkód
V bajtkóde, po operácii new je vrátený 16-bitový celočíselný
index bez znamienka. Toto číslo je index na položku v oblasti danej triedy. Zadaná hodnota je označená ako CONSTANT_Class. Položka v danom poli je reťazec
zadaný v tvare <type> parameter v Jasmine.
Typ |
Popis |
u1 |
new opcode = 0xBB (187) |
u2 |
index |
Tiež
pozri
anewarray,
newarray,
multianewarray