new

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