Может кто-нибудь объяснить мне, почему первый из следующих двух образцов компилируется, а второй - нет? Обратите внимание, что единственное отличие состоит в том, что первый явно указывает ссылку на x с помощью ".this", а второй - нет. В обоих случаях конечное поле x явно пыталось использовать до инициализации.
Я бы подумал, что оба образца будут обрабатываться совершенно одинаково, что приведет к ошибке компиляции для обоих.
1)
public class Foo {
private final int x;
private Foo() {
int y = 2 * this.x;
x = 5;
}
}
2)
public class Foo {
private final int x;
private Foo() {
int y = 2 * x;
x = 5;
}
}