Java statikus kulcsszó példákkal magyarázva

Mit jelent a statikus?

Amikor egy változót vagy egy metódust statikusnak nyilvánít, az az osztályhoz tartozik, nem pedig egy adott példányhoz. Ez azt jelenti, hogy csak egy statikus tag létezik, még akkor is, ha az osztály több objektumát hozza létre, vagy ha nem hoz létre egyet. Minden objektum megosztja.

A statikus kulcsszó változókkal, módszerekkel, kódblokkokkal és beágyazott osztályokkal használható.

Statikus változók

Példa:

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

A COUNTváltozót az adott osztály összes objektuma megosztja. Amikor a Counter osztály objektumait hozzuk létre főben, és hozzáférünk a statikus változóhoz.

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

A kimenet 2, mert a COUNTváltozó statikus és minden egyesével növekszik, amikor a Counter osztály új objektuma jön létre. A statikus változóhoz az adott osztály bármely objektumát is elérheti, például c1.COUNT.

Statikus módszerek

A statikus módszer az osztályhoz tartozik, nem pedig a példányokhoz. Így az osztály példányának létrehozása nélkül is meghívható. Az osztály statikus tartalmának megváltoztatására szolgál. A statikus módszereknek vannak bizonyos korlátozásai:

  1. A statikus módszer nem használhatja az osztály nem statikus tagjait (változókat vagy függvényeket).
  2. Statikus módszer nem használható this, illetve superkulcsszavak.

Példa:

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

A statikus módszerek az osztály példányából is meghívhatók.

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

A kimenet 2, mert statikus módszerrel növekszik increament(). A statikus változókhoz hasonlóan a statikus módszerek is elérhetők példányváltozók segítségével.

Statikus blokkok

A statikus kód blokkokat a statikus változók inicializálására használják. Ezeket a blokkokat a statikus változók deklarálása után azonnal végrehajtjuk.

Példa:

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"

A kimenet 62, mert MOON_COUNTa statikus blokkban változóhoz van rendelve ez az érték.

Statikus beágyazott osztályok

Egy osztálynak lehet statikusan beágyazott osztálya, amely külső osztálynévvel érhető el.

Példa:

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

A fenti példában az osztály Innerközvetlenül elérhető az osztály statikus tagjaként Outer.

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

A java-ban népszerûen használt Builder Pattern statikus beágyazott osztályainak egyik esete.