English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Инициализируется ли статическая переменная в DEFAULT конструкторе Java?

Статические файлы/переменные принадлежат этому классу и загружаются в память вместе с классом. Их можно вызывать без создания объекта (используя имя класса в качестве ссылки). В классе доступен только один экземпляр статического поля, то есть значение статического поля одинаково для всех объектов. Вы можете использовать ключевое слово static для определения статического поля.

пример

public class Sample{
   static int num = 50;
   public void demo(){
      System.out.println("Значение num в методе demo " + Sample.num);
   }
   public static void main(String args[]){
      System.out.println("Значение num в методе main " + Sample.num);
      new Sample().demo();
   }
}

вывод результатов

Значение num в методе main 50
Значение num в методе demo 50

Инициализация статических переменных

Если в классе объявлены статические переменные и они не инициализированы, то как и с использованием переменных экземпляра, компилятор инициализирует их значением по умолчанию в стандартном конструкторе.

пример

public class Sample{
   static int num;
   static String str;
   static float fl;
   static boolean bool;
   public static void main(String args[]){
      System.out.println(Sample.num);
      System.out.println(Sample.str);
      System.out.println(Sample.fl);
      System.out.println(Sample.bool);
   }
}

вывод результатов

0
null
0.0
false

Инициализация статических переменных

Но если вы объявляете статическую переменную и компилятор Java не инициализирует её в стандартном конструкторе, то статические и конечные переменные должны быть инициализированы. Если вы не скомпилируете, то будет сгенерирована ошибка.

пример

public class Sample{
   final static int num;
   final static String str;
   final static float fl;
   final static boolean bool;
   public static void main(String args[]){
      System.out.println(Sample.num);
      System.out.println(Sample.str);
      System.out.println(Sample.fl);
      System.out.println(Sample.bool);
   }
}

Ошибка компиляции

Sample.java:2: ошибка: переменная num не инициализирована в стандартном конструкторе
   final static int num;
^
Sample.java:3: ошибка: переменная str не инициализирована в стандартном конструкторе
   final static String str;
^
Sample.java:4: ошибка: переменная fl не инициализирована в стандартном конструкторе
   final static float fl;
^
Sample.java:5: ошибка: variable bool not initialized in the default constructor
   final static boolean bool;
^
4 ошибки

Вы не можете назначить значение конечной переменной из конструктора -

пример

public class Sample{
   final static int num;
   Sample(){
      num = 100;
   }
}

вывод результатов

Sample.java:4: ошибка: cannot assign a value to final variable num
   num = 100;
^
1 ошибка

Единственный способ инициализировать статические конечные переменные, кроме объявления, - это статический блок.

астатический блокявляется блоком кода, использующим ключевое слово static. Обычно, такие блоки используются для инициализации статических членов. JVM выполняет статические блоки до метода main при загрузке класса.

пример

public class Sample{
   final static int num;
   final static String str;
   final static float fl;
   final static boolean bool;
   static{
      num = 100;
      str = "krishna";
      fl = 100.25f;
      bool = true;
   }
   public static void main(String args[]){
      System.out.println(Sample.num);
      System.out.println(Sample.str);
      System.out.println(Sample.fl);
      System.out.println(Sample.bool);
   }
}

вывод результатов

100
krishna
100.25
true
Основной учебник
Рекомендуется к просмотру