Návratový typ konštruktora v Jave

1. Prehľad

V tomto rýchlom výučbe sa zameriame na návratový typ pre konštruktor v Jave.

Najprv sa oboznámime s tým, ako funguje inicializácia objektov v prostredí Java a JVM. Potom sa pozrieme hlbšie, aby sme videli, ako funguje inicializácia a priradenie objektu pod kapotou.

2. Inicializácia inštancie

Začnime s prázdnou triedou:

verejná trieda Farba {}

Tu vytvoríme inštanciu z tejto triedy a priradíme ju k nejakej premennej:

Farba farby = new Color ();

Po zostavení tohto jednoduchého útržku kódu Java sa pozrime na jeho bytecode pomocou kódu javap -c príkaz:

0: new # 7 // class Color 3: dup 4: invokes special # 9 // Method Color. "" :() V 7: astore_1

Keď vytvoríme inštanciu objektu v Jave, JVM vykoná nasledujúce operácie:

  1. Najskôr si nájde miesto vo svojom procesnom priestore pre nový objekt.
  2. Potom JVM vykoná proces inicializácie systému. V tomto kroku vytvorí objekt v predvolenom stave. The Nový opcode v bytecode je vlastne zodpovedný za tento krok.
  3. Nakoniec inicializuje objekt pomocou konštruktora a ďalších blokov inicializátora. V takom prípade invokálne špeciálne opcode volá konštruktor.

Ako je uvedené vyššie, podpis metódy pre predvolený konštruktor je:

Metóda Color. "" :() V

The je názov metód inicializácie inštancie v JVM. V takom prípade je funkcia, ktorá:

  • neberie nič ako vstup (prázdne zátvorky za názvom metódy)
  • nevracia nič (V. znamenať neplatný)

Preto je návratový typ konštruktora v Jave a JVM neplatný.

Keď sa ešte raz pozrieme na naše jednoduché zadanie:

Farba farby = new Color ();

Teraz, keď vieme, že sa konštruktor vráti neplatný, pozrime sa, ako zadanie funguje.

3. Ako funguje priradenie

JVM je virtuálny stroj založený na zásobníku. Každý stoh sa skladá z rámov stohov. Zjednodušene povedané, každý rámec stohu zodpovedá volaniu metódy. V skutočnosti JVM vytvára rámce s novým volaním metódy a ničí ich, keď dokončia svoju prácu:

Každý rámec zásobníka používa pole na ukladanie lokálnych premenných a zásobník operandov na ukladanie čiastkových výsledkov. Z tohto dôvodu sa pozrime na bytový kód znova:

0: new # 7 // class Color 3: dup 4: invokes special # 9 // Method Color. "" :() V 7: astore_1

Zadanie funguje takto:

  • The Nový inštrukcia vytvorí inštanciu Farba a posúva svoju referenciu do zásobníka operandov
  • The dup operačný kód duplikuje poslednú položku v zásobníku operandov
  • The invokálne špeciálne vezme duplicitný odkaz a spotrebuje ho na inicializáciu. Potom v zásobníku operandov zostane iba pôvodná referencia
  • The astore_1 uloží pôvodný odkaz na index 1 poľa lokálnych premenných. Predpona „a“ znamená, že položka, ktorá sa má uložiť, je odkaz na objekt a „1“ je index poľa

Odteraz, druhá položka (index 1) v poli lokálnych premenných je odkazom na novovytvorený objekt. Preto nestratíme referenciu a priradenie skutočne funguje - aj keď konštruktér nič nevráti!

4. Záver

V tomto rýchlom výučbe sme sa naučili, ako JVM vytvára a inicializuje naše inštancie triedy. Okrem toho sme videli, ako inicializácia inštancie funguje pod kapotou.

Pre ešte podrobnejšie pochopenie JVM je vždy dobré skontrolovať jeho špecifikáciu.


$config[zx-auto] not found$config[zx-overlay] not found