Why are non-final-instance-variables allowed,
but no non-final-local-variables?
It has to do with reachability of the variable. An inner class has a reference to it's outer class, so it is not possible for the outer class to be GC'ed, as long as the inner class is reachable.
This is not true for the method (the local variables). It is possible for the method to save the instance somewhere, or even return it, so, it is possible for the local variables to go out of scope (while the inner class still needs it), when the method returns.
This doesn't mean that the final local variables don't also go out of scope when the methods returns. All the method's local variables go out of scope upon return. What is happening is, since the variable is final, the compiler is making a copy of the variable for the inner class -- the inner class is not actually accessing the final local variable, but an internal private variable that contains the same value.
Henry