Статична ключова дума на Java, обяснена с примери

Какво означава статичен?

Когато декларирате променлива или метод като статични, тя принадлежи на класа, а не на конкретен екземпляр. Това означава, че съществува само един екземпляр на статичен член, дори ако създавате множество обекти от класа или ако не създавате такива. Той ще бъде споделен от всички обекти.

Ключовата дума static може да се използва с променливи, методи, кодови блокове и вложени класове.

Статични променливи

Пример:

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

В COUNTпроменливата ще бъде споделено от всички обекти от този клас. Когато създаваме обекти от нашия клас Counter в main и получаваме достъп до статичната променлива.

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

Изходът е 2, тъй като COUNTпроменливата е статична и се увеличава с единица всеки път, когато се създава нов обект от класа Counter. Можете също да получите достъп до статичната променлива, като използвате всеки обект от този клас, като например c1.COUNT.

Статични методи

Статичният метод принадлежи на класа, а не на екземпляри. По този начин може да се извика, без да се създава екземпляр на клас. Използва се за промяна на статично съдържание на класа. Има някои ограничения на статичните методи:

  1. Статичният метод не може да използва нестатични членове (променливи или функции) на класа.
  2. Статичен метод не може да използва thisили superключови думи.

Пример:

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

Статичните методи могат да бъдат извикани и от екземпляра на класа.

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

Изходът е 2, защото се увеличава чрез статичен метод increament(). Подобно на статичните променливи, статичните методи също могат да бъдат достъпни с помощта на променливи на инстанция.

Статични блокове

Блоковете със статичен код се използват за инициализиране на статични променливи. Тези блокове се изпълняват веднага след деклариране на статични променливи.

Пример:

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"

Изходът е 62, тъй като на променливата MOON_COUNTсе присвоява тази стойност в статичния блок.

Статични вложени класове

Класът може да има статичен вложен клас, който може да бъде достъпен чрез използване на външно име на клас.

Пример:

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

В горния пример класът Innerможе да бъде директно достъпен като статичен член на класа Outer.

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

Един от случаите на използване на статични вложени класове в Builder Pattern, широко използван в java.