Java statična ključna riječ objašnjena primjerima

Što znači statički?

Kada varijablu ili metodu deklarirate kao statičku, ona pripada klasi, a ne određenoj instanci. To znači da postoji samo jedan primjerak statičkog člana, čak i ako kreirate više objekata klase ili ako ne stvorite nijedan. Dijelit će ga svi objekti.

Ključna riječ static može se koristiti s varijablama, metodama, blokovima koda i ugniježđenim klasama.

Statičke varijable

Primjer:

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

COUNTVarijabla će biti zajednički svim objektima te klase. Kada u main-u kreiramo objekte naše klase Counter i pristupamo statičkoj varijabli.

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

Izlaz je 2, jer je COUNTvarijabla statična i povećava se za jedan puta svaki put kada se kreira novi objekt klase Counter. Statičkoj varijabli možete pristupiti i pomoću bilo kojeg objekta te klase, kao što je c1.COUNT.

Statičke metode

Statička metoda pripada klasi, a ne instancama. Dakle, može se pozvati bez stvaranja instance klase. Koristi se za izmjenu statičkih sadržaja klase. Postoje neka ograničenja statičkih metoda:

  1. Statička metoda ne može koristiti nestatične članove (varijable ili funkcije) klase.
  2. Statička metoda ne može koristiti thisniti superključne riječi.

Primjer:

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

Statičke metode također se mogu pozvati iz instance klase.

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

Izlaz je 2 jer se povećava statičkom metodom increament(). Slično statičkim varijablama, statičkim se metodama također može pristupiti pomoću varijabli instance.

Statički blokovi

Blokovi statičkog koda koriste se za inicijalizaciju statičkih varijabli. Ti se blokovi izvršavaju odmah nakon deklaracije statičkih varijabli.

Primjer:

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"

Izlaz je 62, jer je varijabli MOON_COUNTdodijeljena ta vrijednost u statičkom bloku.

Statični ugniježđeni razredi

Klasa može imati statičku ugniježđenu klasu kojoj se može pristupiti korištenjem vanjskog naziva klase.

Primjer:

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

U gornjem primjeru klasi Innerse može izravno pristupiti kao statičnom članu klase Outer.

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

Jedan od slučajeva upotrebe statičnih ugniježđenih klasa u Builder Pattern popularno korištenom u javi.