Попытка скомпилировать этот фрагмент кода
public class Main {
public static void main(String args[]) {
new Main();
}
{ System.out.println(x); } //Error here
int x=1;
}
создает ошибку cannot reference a field before it is defined
. Но если я изменил строку инициализации на
{ System.out.println(this.x); }
он работает как прелесть, печатает значение int по умолчанию 0.
Это немного сбивает меня с толку, почему this
имеет значение? Разве это не должно быть избыточным в этом случае? Может ли кто-нибудь объяснить мне, что происходит за кулисами, чтобы понять, как это работает?
PS: Я знаю, что объявив x
, прежде чем инициализатор заставит его работать.