All the evolution we know of proceeds from the vague to the definite.
Each local variable (§14.4) and every blank
final (§4.12.4) field (§18.104.22.168) must have a definitely assigned value when any access of its value occurs. An access to its value consists of the simple name of the variable occurring anywhere in an expression except as the left-hand operand of the simple assignment operator
=. A Java compiler must carry out a specific conservative flow analysis to make sure that, for every access of a local variable or blank
f is definitely assigned before the access; otherwise a compile-time error must occur.
Similarly, every blank
final variable must be assigned at most once; it must ...