Why can't inner classes declare static members?

Basically just an arbitrary decision. there's no reason it couldn't be supported, but there is also not really any good reason to support it. just declare the static field in the outer class.

also, that quote may not be entirely correct: i believe you can declare a static serialVersionUID in an inner class.


Because the Java Language Specification says so:

An inner class is a nested class that is not explicitly or implicitly declared static. Inner classes may not declare static initializers (§8.7) or member interfaces. Inner classes may not declare static members, unless they are compile-time constant fields (§15.28).

As for why it was specified that way, I do not know. My guess is that inner classes were designed as small helper classes that should be very limited in complexity.


Why can't inner classes declare static members?

The inner class is contained in the instance area of ​​the outer class. Therefore, within the inner class, it is not allowed to declare static members. On the other hand, the static inner class is contained in the static area of ​​the outer class. Thus, it is only allowed to declare static members and not instance members.

image >> two areas inside outer class