A static variable in a class is shared by all instances of that class in a JVM for a class loader. Now, a class definition is different than a variable declaration. A class is declared static so that it can be accessed statically(without an instance) from static/non-static blocks in same/other classes. This does not mean that all instances of that class will be static. It is perfectly legal to define an instance variable of a static class. You need to understand that it is just the class "definition" that is static.