1
JavaIntermediate#inner-classes
A static nested class doesn't hold an implicit reference to an outer instance and can be instantiated independently. A non-static inner class holds an implicit reference to its enclosing instance and requires one to be created.
class Outer {
static class StaticNested {}
class Inner {}
}
Outer.StaticNested sn = new Outer.StaticNested();
Outer o = new Outer();
Outer.Inner in = o.new Inner();