Premenná inštancie vs miestna premenná
Premenná inštancie je typ premennej, ktorá je prítomná v objektovo orientovanom programovaní. Je to premenná, ktorá je definovaná v triede a každý objekt tejto triedy obsahuje samostatnú kópiu tejto premennej. Na druhej strane použitie lokálnych premenných nie je obmedzené na objektovo orientované programovacie jazyky. Je to premenná, ktorá môže byť hodnotená len v rámci konkrétneho bloku kódu (napr. funkcia, blok slučky atď.), v ktorom je definovaná. Z tohto dôvodu sa hovorí, že lokálne premenné majú lokálny rozsah.
Čo je premenná inštancie?
Premenné inštancie sa používajú v objektovo orientovanom programovaní na ukladanie stavu každého objektu v triede. Sú tiež známe ako členské premenné alebo premenné poľa. Premenné inštancie sú v jazyku Java deklarované bez použitia kľúčového slova static. Hodnoty uložené v premenných inštancie sú jedinečné pre každý objekt (každý objekt má samostatnú kópiu) a hodnoty v nich uložené predstavujú stav daného objektu. Priestor pre premennú inštancie je alokovaný v halde, keď je tento objekt alokovaný v halde. Preto sa premenné inštancie uchovávajú v pamäti, pokiaľ je objekt aktívny. Napríklad farba jedného auta je nezávislá od farby iného auta. Takže farba objektu auta môže byť uložená v premennej inštancie. V praxi sú premenné inštancie deklarované vo vnútri tried a mimo metód. Zvyčajne sú premenné inštancie deklarované ako súkromné, takže k nim možno pristupovať iba v rámci triedy, v ktorej je deklarovaná.
Čo je miestna premenná?
Lokálne premenné sú premenné s lokálnym rozsahom a sú deklarované v rámci špecifického bloku kódu. Lokálne premenné možno považovať za premenné, ktoré metóda používa na uloženie dočasného stavu. Rozsah lokálnej premennej sa určuje pomocou miesta, kde je premenná deklarovaná, a na tento účel sa nepoužívajú špeciálne kľúčové slová. Typicky je prístup k lokálnej premennej obmedzený v rámci bloku kódu, ktorý je deklarovaný (t. j. medzi otváracou a zatváracou zátvorkou tohto bloku kódu). Lokálne premenné sú zvyčajne uložené v zásobníku hovorov. To by umožnilo rekurzívnym volaniam funkcií udržiavať svoje vlastné kópie lokálnych premenných, ktoré sa majú ukladať do oddelených pamäťových adresných priestorov. Keď metóda dokončí svoje vykonávanie, informácie o tejto metóde sa objavia zo zásobníka hovorov, čím sa zničia aj lokálne premenné, ktoré boli uložené.
Aký je rozdiel medzi premennou inštancie a miestnou premennou?
Premenné inštancie sú deklarované v rámci tried mimo metód a ukladajú stav objektu, zatiaľ čo lokálne premenné sú deklarované v rámci blokov kódu a používajú sa na ukladanie stavu metódy. Premenná inštancie je aktívna, pokiaľ je objekt, ktorý obsahuje túto premennú, aktívny, zatiaľ čo lokálna premenná je aktívna počas vykonávania tejto metódy/bloku kódu. K premennej inštancie (ktorá je deklarovaná ako verejná) je možné pristupovať v rámci triedy, zatiaľ čo k lokálnej premennej je možné pristupovať iba v rámci bloku kódu, ktorý je deklarovaný. Použitie premenných inštancie je obmedzené len na objektovo orientované programovanie, zatiaľ čo lokálne premenné takéto obmedzenie nemajú.