Proměnná instance vs místní proměnná
Proměnná instance je typ proměnné, která se vyskytuje v objektově orientovaném programování. Je to proměnná, která je definována ve třídě a každý objekt této třídy obsahuje samostatnou kopii této proměnné. Na druhou stranu použití lokálních proměnných není omezeno na objektově orientované programovací jazyky. Je to proměnná, kterou lze hodnotit pouze v rámci určitého bloku kódu (např. funkce, blok smyčky atd.), ve kterém je definována. Z tohoto důvodu se říká, že místní proměnné mají lokální rozsah.
Co je to proměnná instance?
Proměnné instance se používají v objektově orientovaném programování pro ukládání stavu každého objektu ve třídě. Jsou také známé jako členské proměnné nebo proměnné pole. Proměnné instance jsou v Javě deklarovány bez použití klíčového slova static. Hodnoty uložené v proměnných instance jsou jedinečné pro každý objekt (každý objekt má samostatnou kopii) a hodnoty v nich uložené představují stav daného objektu. Prostor pro proměnnou instance je alokován v haldě, když je tento objekt alokován v haldě. Proto jsou proměnné instance uchovávány v paměti, dokud je objekt aktivní. Například barva jednoho vozu je nezávislá na barvě jiného vozu. Takže barva objektu auta může být uložena v proměnné instance. V praxi jsou proměnné instance deklarovány uvnitř tříd a vně metod. Obvykle jsou proměnné instance deklarovány jako soukromé, takže k nim lze přistupovat pouze v rámci třídy, ve které je deklarována.
Co je to místní proměnná?
Místní proměnné jsou proměnné s lokálním rozsahem a jsou deklarovány v rámci specifického bloku kódu. Lokální proměnné lze považovat za proměnné, které metoda používá k uložení svého dočasného stavu. Rozsah lokální proměnné je určen pomocí umístění, kde je proměnná deklarována, a pro tento účel se nepoužívají speciální klíčová slova. Obvykle je přístup k lokální proměnné omezen v rámci bloku kódu, který je deklarován (tj. mezi otevírací a uzavírací závorkou tohoto bloku kódu). Lokální proměnné jsou obvykle uloženy v zásobníku volání. To by umožnilo rekurzivním voláním funkcí udržovat své vlastní kopie lokálních proměnných, které mají být uloženy v oddělených adresových prostorech paměti. Když metoda dokončí své provádění, vyskočí informace o této metodě ze zásobníku volání, což také zničí místní proměnné, které byly uloženy.
Jaký je rozdíl mezi proměnnou instance a místní proměnnou?
Proměnné instance jsou deklarovány v rámci tříd mimo metody a ukládají stav objektu, zatímco lokální proměnné jsou deklarovány v blocích kódu a používají se pro ukládání stavu metody. Proměnná instance je aktivní, dokud je objekt, který tuto proměnnou obsahuje, aktivní, zatímco lokální proměnná je aktivní během provádění této metody/bloku kódu. K proměnné instance (která je deklarována jako veřejná) lze přistupovat v rámci třídy, zatímco k místní proměnné lze přistupovat pouze v rámci bloku kódu, který je deklarován. Použití instančních proměnných je omezeno pouze na objektově orientované programování, zatímco lokální proměnné takové omezení nemají.