Since all non-local variables are assigned an initial value (and the assignment happens-before everything else), there is no problem to read them at any time.
The spec selectively forbids some accesses at some situations, reasoning that such accesses are most likely programming mistakes. But had these accessed been allowed, they'll have well-defined semantics.
Actually a programmer can easily bypass the restrictions and "indirectly" access the field anyway; the semantics of that access is the same as the "direct" access if it were allowed.
int var = this.var + 1; // suppose javac forbids this
int var = this.getVar() + 1; // but can javac forbid this?