I think inner classes are non-static by definition because they can access non-static members of the class they are contained in.
This means that any "static methods" of this class would, in essence, be non-static as they could differ based on which object they are contained in.
For example:
public class Container {
public int x;
public class Contained {
static int x = Container.this.x;
}
}
If this compiled, you could do this:
Container a = new Container();
a.x = 1;
Container b = new Container();
b.x = 2;
Then a.Contained.x != b.Contained.x
(assuming this line could compile), which doesn't make sense since both are supposed to be static
.