artur a,
1) Because everything about an inner class is in RELATION to it's outer class. Therefore any "static stuff" that you might want to declare in the inner class needs to belong instead to the outer class.
From the Sun Inner Classes Specification:
http://java.sun.com/products/jdk/1.1/docs/guide/innerclasses/spec/innerclasses.doc6.html#13908
It is helpful at this point to abuse the terminology somewhat, and say, loosely, that the static keyword always marks a "top-level" construct (variable, method, or
class), which is never subject to an enclosing instance.
This shows why an inner class cannot declare a static member, because the entire body of the inner class is in the scope of one or more enclosing instances.
2) Actually what the JLS says is
Any local variable, formal method parameter or exception handler parameter used but not declared in an inner class must be declared final, and must be definitely assigned (�16) before the body of the inner class.
Instances can live longer than methods.
If an inner class accessed a non-final variable that was declared in a
method of the outer class (making it a local variable of the method), when the method that creates the inner class instance ends, that variable will not be available any more. By making inner classes only use final variables of the outer class method the compiler can turn the variables into constants so it doesn't matter when the local variable goes out of scope.