I'm not sure why you cannot have static non-final members in an inner class, but since static members are not tied to any particular instance of an object, it doesn't matter if it is in an inner or outer class.
eg.
class OuterClass { private static int staticMember; class InnerClass { void incStatic() { staticMember++; } } }
You can access the static member from the inner class, as if it were inside the inner class.
source share