English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Статические файлы/переменные принадлежат этому классу и загружаются в память вместе с классом. Их можно вызывать без создания объекта (используя имя класса в качестве ссылки). В классе доступен только один экземпляр статического поля, то есть значение статического поля одинаково для всех объектов. Вы можете использовать ключевое слово 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