Statisk Java-nøgleord forklaret med eksempler

Hvad betyder statisk?

Når du erklærer en variabel eller en metode som statisk, hører den til klassen snarere end en bestemt forekomst. Dette betyder, at der kun findes en forekomst af et statisk medlem, selvom du opretter flere objekter i klassen, eller hvis du ikke opretter nogen. Det deles af alle objekter.

Det statiske nøgleord kan bruges med variabler, metoder, kodeblokke og indlejrede klasser.

Statiske variabler

Eksempel:

public class Counter { public static int COUNT = 0; Counter() { COUNT++; } }

Den COUNTvariabel vil blive delt af alle objekter af denne klasse. Når vi opretter objekter i vores tællerklasse i hovedtræk og får adgang til den statiske variabel.

public class MyClass { public static void main(String[] args) { Counter c1 = new Counter(); Counter c2 = new Counter(); System.out.println(Counter.COUNT); } } // Outputs "2"

Outout er 2, fordi COUNTvariablen er statisk og bliver forøget med en hver gang et nyt objekt i Counter-klassen oprettes. Du kan også få adgang til den statiske variabel ved hjælp af ethvert objekt i den klasse, f.eks c1.COUNT.

Statiske metoder

En statisk metode hører til klassen snarere end forekomster. Således kan det kaldes uden at skabe forekomst af klasse. Det bruges til at ændre det statiske indhold i klassen. Der er nogle begrænsninger for statiske metoder:

  1. Statisk metode kan ikke bruge ikke-statiske medlemmer (variabler eller funktioner) i klassen.
  2. Statisk metode kan ikke bruges thiseller supernøgleord.

Eksempel:

public class Counter { public static int COUNT = 0; Counter() { COUNT++; } public static void increment(){ COUNT++; } }

Statiske metoder kan også kaldes fra instans af klassen.

public class MyClass { public static void main(String[] args) { Counter.increment(); Counter.increment(); System.out.println(Counter.COUNT); } } // Outputs "2"

Outputtet er 2, fordi det forøges ved en statisk metode increament(). I lighed med statiske variabler kan der også fås adgang til statiske metoder ved hjælp af instansvariabler.

Statiske blokke

Statiske kodeblokke bruges til at initialisere statiske variabler. Disse blokke udføres umiddelbart efter erklæring af statiske variabler.

Eksempel:

public class Saturn { public static final int MOON_COUNT; static { MOON_COUNT = 62; } }
public class Main { public static void main(String[] args) { System.out.println(Saturn.MOON_COUNT); } } // Outputs "62"

Outputtet er 62, fordi variabel MOON_COUNTtildeles denne værdi i den statiske blok.

Statisk indlejrede klasser

En klasse kan have statisk indlejret klasse, som kan tilgås ved hjælp af det ydre klassens navn.

Eksempel:

public class Outer { public Outer() { } public static class Inner { public Inner() { } } }

I ovenstående eksempel Innerkan man få direkte adgang til klassen som et statisk medlem af klassen Outer.

public class Main { public static void main(String[] args) { Outer.Inner inner = new Outer.Inner(); } }

Et af anvendelses tilfælde af statiske indlejrede klasser i Builder Pattern populært brugt i java.