System.out
- это статическое поле / глобальный объект / синглтон.
Оно доступно везде, нет необходимости в нестатическом контексте.
На этомобъект (экземпляр PrintStream
) вы можете вызвать метод println
.
Обратите внимание, что PrintStream#println
является , а не статическим методом.Но вы можете вызывать нестатические методы даже из статических методов, если у вас есть экземпляр для их вызова (например, System.out
здесь).
Статический и нестатический контекст имеет значение, только если вынужен доступ к this
(текущий экземпляр вашего собственного класса).Здесь это не нужно (если только вы не хотите сделать System.out.println(this)
- это не будет работать внутри статического метода).
Ничто из этого не является "особенным" в System.out
или не требует внутренней магии JVM.