Статичне ключове слово 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, який широко використовується в Java.