что-то статичное означает, что вы не можете создать его экземпляр.
Это не правда. Вы не только не можете создавать экземпляры статических полей, вы также не можете создавать экземпляры нестатических полей, потому что это поле , а не класс.
static
просто означает, что вам не нужно создавать экземпляр окружающего класса для доступа к нему. static
члены принадлежат самому классу , а не экземплярам этого класса.
С этим определением статические классы имеют смысл.
Экземпляры статических классов могут быть созданы без создания экземпляров их внешнего класса:
class Outer {
static class Inner {}
}
Outer.Inner obj = new Outer.Inner(); // no Outer instances created!
В то время как экземпляры нестатических внутренних классов не могут:
class Inner {
class Outer {
}
}
Inner inner = new Inner(); // I have to create this instance, otherwise it wouldn't compile
Inner.Outer outer = inner.new Outer();