В System.java экземпляр out
создается:
public final static PrintStream out = nullPrintStream();
Вы ожидаете, что это вернет допустимый объект PrintStream
, за исключением того, как выглядит метод:
private static PrintStream nullPrintStream() throws NullPointerException {
if (currentTimeMillis() > 0) {
return null;
}
throw new NullPointerException();
}
Это всегда будет возвращать ноль. Однако вызов чего-то вроде System.out.println()
вызывает метод println()
для действительного объекта PrintStream
вместо создания исключения нулевого указателя. Может ли кто-нибудь объяснить, почему это работает и как/где фактически создается экземпляр объекта PrintStream
?