Блоки инициализации
Почему выполнится без ошибок?
public class Test{
static{
int x = 5;
}
static int x = 5;
}
Источник: Stack Overflow на русском
Почему выполнится без ошибок?
public class Test{
static{
int x = 5;
}
static int x = 5;
}
Здесь нет кода, который мог бы выбросить исключение. Видимо, вас интересует, почему это компилируется.
Все просто: у вас статическая переменная Test.x
и один статический инициализатор с локальной переменной x
, которая в силу свой локальности "перекрывает" переменную Test.x
.
Вот аналогичный случай:
public class Test {
static int x;
public static void main(String[] args) {
x = 5;
System.out.println("x = " + x); // Используется Test.x
int x;
x = 10;
System.out.println("x = " + x); // Используется локальная переменная x
System.out.println("Test.x = " + Test.x); // Используется Test.x
}
}
Вывод:
x = 5
x = 10
Test.x = 5
А ещё можно так написать, присвоение до объявления.
class Main{
static {
x = 5;
}
static int x;
}