Since you can not use the local reference variable(within a method) without initializing it, usually the variable is safe to be a uninitialized final local variables. Ofcourse as you said, before using that variable you should either initialize or remove final modifier.
Ok, so am I right that the fact that (if it were allowed to be declared it would get a default value) is the reason it is in fact NOT allowed? That is to say is the reason that one can't declare a final reference var in 'instance space' is because the language is trying to protect you from inadvertantly having a final reference variable that is stuck being null?
Your statements are correct. Final instance variables must be definitely assigned by the end of every constructor of their class, so you can't have constructors that don't assign to the variables. Also, only constructors and initializer blocks can assign values to final instance variables. The exact set of rules are a bit complex, based on Java's precise definition of "definite assignment"; see the JLS for more details if you're interested.
Some other subtleties to note: a constructor can call another constructor to do the assignment, like this:
And the assignment can also be done in an initializer block, like this:
However, you cannot assign more than once to a final instance variable. So these two programs are both illegal: