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:

  1. En variabel med samma livslängd som programmet, enligt beskrivningen ovan (språkoberoende); eller
  2. (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() .

Se även