Statické (klíčové slovo) - Static (keyword)

V některých programovacích jazycích, jako je C (a jeho blízcí potomci jako C ++ , Objective-C a Java ), staticje vyhrazené slovo ovládající jak životnost (jako statická proměnná ), tak viditelnost (v závislosti na propojení ). Účinek klíčového slova se liší v závislosti na podrobnostech konkrétního programovacího jazyka.

Běžné chování C/C ++

V jazyce C a C ++ účinek staticklíčového slova v jazyce C závisí na tom, kde k deklaraci dochází.

staticmůže fungovat jako třída úložiště (nezaměňovat s třídami v objektově orientovaném programování ), jak může extern, autoa register(což jsou také vyhrazená slova). Každá proměnná a funkce má jednu z těchto tříd úložiště; pokud deklarace neurčuje třídu úložiště, použije se výchozí nastavení závislé na kontextu:

  • extern pro všechny deklarace nejvyšší úrovně ve zdrojovém souboru,
  • auto pro proměnné deklarované ve funkčních orgánech.
Třída úložiště Život Viditelnost
extern spuštění programu externí (celý program)
static spuštění programu interní ( pouze překladová jednotka )
auto, register provedení funkce (žádný)

V těchto jazycích má termín „statická proměnná“ dva významy, které lze snadno zaměnit:

  1. Proměnná se stejnou životností jako program, jak je popsáno výše (nezávislá na jazyce); nebo
  2. (Specifické pro rodinu C) Proměnná deklarovaná s třídou úložiště static.

Proměnné s třídou úložiště extern, které zahrnují proměnné deklarované na nejvyšší úrovni bez explicitní třídy úložiště, jsou staticv prvním významu, ale ne ve druhém.

Statická globální proměnná

Proměnná deklarovaná jako staticna nejvyšší úrovni zdrojového souboru (mimo jakékoli definice funkcí) je viditelná pouze v celém tomto souboru („ rozsah souboru “, také známý jako „ interní propojení “). Při tomto použití je klíčové slovo staticznámé jako „ specifikátor přístupu “.

Statická funkce

Podobně statická funkce - funkce deklarovaná jako staticna nejvyšší úrovni zdrojového souboru (mimo definice všech tříd) - je viditelná pouze v celém tomto souboru („ rozsah souboru “, také známý jako „ interní propojení “).

Statické lokální proměnné

Proměnné deklarované jako staticuvnitř funkce jsou staticky přidělovány, takže si uchovávají své paměťové místo po celou dobu provádění programu, přičemž mají stejný rozsah viditelnosti jako automatické lokální proměnné ( autoa register), což znamená, že zůstávají pro funkci lokální. Proto jakékoli hodnoty, které funkce vloží do svých statických lokálních proměnných během jednoho volání, budou stále k dispozici, když bude funkce znovu vyvolána.

C ++ specifické

Statické členské proměnné

V C ++ jsou členské proměnné deklarované jako staticuvnitř definic tříd proměnné třídy (sdílené mezi všemi instancemi třídy, na rozdíl od proměnných instance ).

Statická metoda

Podobně statická metoda  - metoda deklarovaná jako staticuvnitř definice třídy - má být relevantní pro všechny instance třídy, nikoli pro jakoukoli konkrétní instanci. Metodu deklarovanou jako staticlze volat bez vytváření instance třídy.

Jáva

Toto klíčové slovo staticznamená, že tato metoda je nyní metodou třídy; bude voláno spíše prostřednictvím názvu třídy než prostřednictvím objektu.

Statická metoda se obvykle nazývá jako <classname>.methodname(), zatímco metoda instance se normálně nazývá jako <objectname>.methodname().