Вопрос из знаменитой книги SCJP 6
Данный:
public class Dark { int x = 3; public static void main(String[] args) { new Dark().go1(); } void go1() { int x; go2(++x); } void go2(int y) { int x = ++y; System.out.println(x); } }
Что в итоге?
A. 2
B. 3
C. 4
D. 5
E. Ошибка компиляции
F. Исключение выбрасывается во время выполнения
Ответ в соответствии с этой книгой:
✓ E правильно. В go1() локальная переменная x не инициализируется.
Мои вопросы: почему go1() не может использовать переменную экземпляра x, инициализированную как 6 на строке 4 здесь?
Поскольку существует локальная переменная x. Если int x;
были прокомментированы, он будет работать нормально и использовать переменную экземпляра.
В Java все локальные переменные должны быть инициализированы, если не будут выдаваться ошибки. Но вы не должны инициализировать параметры метода.
если у вас нет int x
тогда это будет нормально. потому что в этом случае компилятор будет использовать локальную переменную, которая назначается для уровня класса.
go1()
определил локальную переменную с именемx
которая скрывает переменную экземпляраx
. Локальныйx
не был инициализирован, таким образом, ошибка компиляции.