1) Declaring a top level class static dont mean anything because you can declare member variable as static and call that on class name with dot operator.
2) Now inner class is member variable so you can declare it static so that you dont have to create the instance of outer class to call it. And because it is member variable of the class all the rules for member variable apply's to it also.
3) local classes is local to a method so the rules for local variable will be applicable to it.
i think i have answer it all.
please let me know if i have missed something or you not getting what i am trying to convey.