Java staatiline märksõna koos näidetega

Mida tähendab staatiline?

Kui kuulutate muutuja või meetodi staatiliseks, kuulub see klassi, mitte konkreetse eksemplari hulka. See tähendab, et staatilisest liikmest eksisteerib ainult üks eksemplar, isegi kui loote klassi mitu objekti või kui te ei loo ühtegi. Seda jagavad kõik objektid.

Staatilist märksõna saab kasutada muutujate, meetodite, koodiplokkide ja sisestatud klassidega.

Staatilised muutujad

Näide:

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

COUNTMuutuja jagavad kõik objektid selle klassi. Kui loome põhiliselt oma Counter-klassi objektid ja pääseme juurde staatilisele muutujale.

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

Väljund on 2, kuna COUNTmuutuja on staatiline ja suureneb ühega iga kord, kui luuakse uus loenduriklass. Staatilisele muutujale pääseb juurde ka selle klassi mis tahes objekti abil, näiteks c1.COUNT.

Staatilised meetodid

Staatiline meetod kuulub pigem klassi kui eksemplaride hulka. Seega saab seda kutsuda klassi eksemplari loomata. Seda kasutatakse klassi staatilise sisu muutmiseks. Staatilistel meetoditel on mõned piirangud:

  1. Staatiline meetod ei saa kasutada klassi mittestaatilisi liikmeid (muutujaid ega funktsioone).
  2. Staatilist meetodit ei saa kasutada thisega supermärksõnu.

Näide:

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

Staatilisi meetodeid saab kutsuda ka klassi eksemplarist.

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

Väljund on 2, kuna seda suurendatakse staatilise meetodi abil increament(). Sarnaselt staatiliste muutujatega saab staatilistele meetoditele juurde pääseda ka näiteks muutujate abil.

Staatilised plokid

Staatiliste muutujate initsialiseerimiseks kasutatakse staatilisi koodiplokke. Need plokid täidetakse kohe pärast staatiliste muutujate deklareerimist.

Näide:

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"

Väljund on 62, kuna muutujale MOON_COUNTon see väärtus määratud staatilises plokis.

Staatilised pesastatud klassid

Klassil võib olla staatiline pesastatud klass, millele pääseb juurde, kasutades välimist klassi nime.

Näide:

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

Ülaltoodud näites Innerpääseb klassi otse staatilise klassi liikmena Outer.

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

Üks ehituskomplektis olevate staatiliste pesastatud klasside kasutusjuhtumitest, mida levinumalt kasutatakse Java-s.