Рассмотрим следующий сценарий:
Код: 1
public class StaticDemo {
static{
b=5;
System.out.println("Static B:"+b);/*Compilation error:"Cannot reference a field before it is defined"*/
}
static int b;
static{
System.out.println("B:"+b);
}
public static void main(String[] args) {
}
}
Комментируя код, как показано ниже, ошибок нет, и отображается следующий вывод.
Код: 2
public class StaticDemo {
static{
b=5;
//System.out.println("Static B:"+b);
}
static int b;
static{
System.out.println("B:"+b);
}
public static void main(String[] args) {
}
}
Вывод-
B:5
Если выполнение основано на порядке записи статических переменных или блоков.
почему ошибка компиляции не возникает при инициализации (
b=5
), как показано в коде: 2.А также, пожалуйста, объясните, почему выдается ошибка для кода: 1, если код: 2 верен?