In JLS 8:
In 16:
An access to its value consists of the simple name of the variable (or, for a field, the simple name of the field qualified by this).
And we know that a final blank field cannot be accessed until it is definitely assigned.
So from 1 and 2 we deduce that we cannot access the final blank field with simple name qualified by this.
But
this code compiles fine:
public class Test {
final int y;
final int z = this.y;
{ y = 1;
}
}
But it's error if we put final int z = y
;
Where is the problem?