Статическая переменная в Java

Статика может быть:

  1. Статические переменные
  2. Статические методы
  3. Статические блоки кода.

Давайте сначала рассмотрим статические переменные и статические методы.

Что такое статическая переменная в Java?

Статическая переменная в Java — это переменная, принадлежащая классу и инициализируемая только один раз в начале выполнения. Это переменная, которая принадлежит классу, а не объекту (экземпляру). Статические переменные инициализируются только один раз, в начале выполнения. Эти переменные будут инициализированы первыми, перед инициализацией любых переменных экземпляра.

  • Единая копия, которая будет использоваться всеми экземплярами класса
  • Доступ к статической переменной можно получить напрямую по имени класса, и ей не нужен какой-либо объект.

Синтаксис:

<class-name>.<variable-name>

Что такое статический метод Java?

Статический метод в Java — это метод, принадлежащий классу, а не объекту. Статический метод может обращаться только к статическим данным. Это метод, принадлежащий классу, а не объекту (экземпляру). Статический метод может обращаться только к статическим данным. Он не может получить доступ к нестатическим данным (переменные экземпляра).

  • Статический метод может вызывать только другие статические методы и не может вызывать из него нестатический метод.
  • Доступ к статическому методу можно получить непосредственно по имени класса, и ему не нужен какой-либо объект.
  • Статический метод никоим образом не может ссылаться на ключевые слова «this» или «super».

Синтаксис:

<class-name>.<method-name>

Примечание: Основной метод является статическим, поскольку он должен быть доступен для запуска приложения до того, как произойдет какое-либо создание экземпляра.

Давайте изучим нюансы статических ключевых слов, выполнив несколько упражнений!

Пример: как вызывать статические переменные и методы

Шаг 1) Скопируйте следующий код в редактор

public class Demo{
   public static void main(String args[]){
     Student s1 = new Student();
     s1.showData();
     Student s2 = new Student();
     s2.showData();
     //Student.b++;
     //s1.showData();
  }
}

class Student {
int a; //initialized to zero
static int b; //initialized to zero only when class is loaded not for each object created.

  Student(){
   //Constructor incrementing static variable b
   b++;
  }

   public void showData(){
      System.out.println("Value of a = "+a);
      System.out.println("Value of b = "+b);
   }
//public static void increment(){
//a++;
//}

}

Шаг 2) Сохраните и скомпилируйте код. Запустите код как Java-демо.

Шаг 3) Ожидаемый результат показан ниже


Java Статические методы и переменные

На следующей диаграмме показано, как создаются ссылочные переменные и объекты, а также как различные экземпляры получают доступ к статическим переменным.


Java Статические методы и переменные

Шаг 4) Доступ к статической переменной можно получить извне класса, используя синтаксис ИмяКласса.Имя_Переменной. Раскомментируйте строки №7 и 8. Сохраните, скомпилируйте и запустите. Наблюдайте за результатом.

Value of a = 0
Value of b = 1
Value of a = 0
Value of b = 2
Value of a = 0
Value of b = 3

Шаг 5) Раскомментируйте строки 25,26 и 27. Сохраните, скомпилируйте и запустите.

	 error: non-static variable a cannot be referenced from a static context a++; 

Шаг 6) Ошибка = ? Это связано с тем, что невозможно получить доступ к переменной экземпляра «a«из метода статического класса Java»увеличить».

Что такое статический блок Java?

Команда статический блок это блок операторов внутри Java класс, который будет выполняться при первой загрузке класса в JVM, статический блок помогает инициализировать статические элементы данныхточно так же, как конструкторы помогают инициализировать члены экземпляра.

class Test{
 static {
 //Code goes here
 }
}

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

Пример: Как получить доступ к статическому блоку

public class Demo {
 static int a;
 static int b;
 static {
    a = 10;
    b = 20;
 }
 public static void main(String args[]) {

  System.out.println("Value of a = " + a);
  System.out.println("Value of b = " + b);

 	}
}

вы получите следующий вывод программы.

Value of a = 10
Value of b = 20