Statisk (sökord)
I vissa programmeringsspråk som C (och dess nära ättlingar som C++ , Objective-C och Java ) är static
ett reserverat ord som styr både livslängd (som en statisk variabel ) och synlighet (beroende på länkning ). Effekten av nyckelordet varierar beroende på detaljerna i det specifika programmeringsspråket.
Vanligt C/C++-beteende
I C och C++ beror effekten av det statiska
nyckelordet i C på var deklarationen sker.
static
kan fungera som en lagringsklass (inte att förväxla med klasser i objektorienterad programmering ), liksom extern
, auto
och register
(som också är reserverade ord). Varje variabel och funktion har en av dessa lagringsklasser; om en deklaration inte anger lagringsklassen, används en kontextberoende standard:
-
extern
för alla deklarationer på toppnivå i en källfil, -
auto
för variabler som deklareras i funktionskroppar.
Förvaringsklass | Livstid | Synlighet |
---|---|---|
extern
|
programkörning | extern (hela programmet) |
statisk
|
programkörning | intern ( endast översättningsenhet ) |
auto , registrera
|
funktionsutförande | (ingen) |
På dessa språk har termen "statisk variabel" två betydelser som är lätta att blanda ihop:
- En variabel med samma livslängd som programmet, enligt beskrivningen ovan (språkoberoende); eller
- (C-familjespecifik) En variabel deklarerad med lagringsklassen
static
.
Variabler med lagringsklass extern
, som inkluderar variabler deklarerade på toppnivå utan en explicit lagringsklass, är statiska
i den första betydelsen men inte i den andra.
Statisk global variabel
En variabel som deklareras som statisk
på den översta nivån av en källfil (utanför alla funktionsdefinitioner) är bara synlig i hela filen (" filomfång ", även känd som " intern länkning "). I den här användningen är nyckelordet static
känt som en " åtkomstspecifikator ".
Statisk funktion
På samma sätt är en statisk funktion – en funktion som deklareras som statisk
på översta nivån av en källfil (utanför alla klassdefinitioner) – endast synlig i hela filen (" filomfång ", även känd som " intern länkning ").
Statiska lokala variabler
Variabler som deklareras som statiska
inuti en funktion tilldelas statiskt och behåller således sin minnesplats under hela programkörningen, samtidigt som de har samma synlighetsomfång som automatiska lokala variabler ( auto
och register
), vilket innebär att de förblir lokala för funktionen. Därför kommer de värden som funktionen än lägger in i sina statiska lokala variabler under ett anrop fortfarande att finnas när funktionen anropas igen.
C++ specifik
Statiska medlemsvariabler
I C++ är medlemsvariabler som deklareras som statiska
inuti klassdefinitioner klassvariabler (delade mellan alla klassinstanser, i motsats till instansvariabler ).
Statisk metod
På samma sätt är en statisk metod – en metod som deklareras som statisk
i en klassdefinition – avsedd att vara relevant för alla instanser av en klass snarare än någon specifik instans. En metod som deklareras som statisk
kan anropas utan att instansiera klassen.
Java
Detta nyckelord static
betyder att denna metod nu är en klassmetod; det kommer att anropas genom klassnamn snarare än genom ett objekt.
En statisk metod kallas normalt som <klassnamn>.methodname()
, medan en instansmetod normalt kallas <objektnamn>.methodname()
.