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:
- Najskôr si nájde miesto vo svojom procesnom priestore pre nový objekt.
- 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.
- 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.