A non-static inner class can not have static members. But it helps to know WHY, otherwise if you're like me, you'll likely forget.
I'm still in training for the
SCJP myself, so correct me if I'm wrong, but I believe the reason is that since the inner class is non-static, the inner class does not exist unless there is an instance of the outer class first.
So you can't just do:
Outer.Inner.staticVar = 123;
Now, think about static inner classes, or as they call them "top-level nested inner classes". Why else would we be able to use static? We obviously can't use static for regular top-level classes, but we can for inner classes. Here you put the keyword "static" as part of the inner class delcaration. Now you are allowed to declare static members in the inner class because the inner class is static and has existence on it's own without the need for an instance of the outer class to exist, sort of like static member variables.
Hope this helped more than it confused. If you can grasp certain concepts, then in some cases like this you can figure it out without memorization.