Системные исходящие, входящие и ошибочные потоки объявлены нулевыми [дубликаты]

Я просмотрел исходный код java.lang.System и нашел следующие строки:

public final static InputStream in = null;
public final static PrintStream out = null;
public final static PrintStream err = null;

Я знаю, что окончательную ссылку нельзя переназначить, поэтому вызовы таких методов, как «System.out.println», должны вызывать исключение NullPointerException. С другой стороны, я увидел, что System.setOut реализован на C (ну, setOut0), и поинтересовался, что тут творится волшебства, и как я могу переназначить значение финальной ссылке.


person Brrch    schedule 05.05.2015    source источник
comment
Модификатор final действительно применяется только к уровню Java. Вероятно, они были установлены из собственного кода в очень ранний момент времени. Я предполагаю, что единственная цель присваивания - заткнуть компилятор из-за того, что конечная переменная никогда не назначается.   -  person Wormbo    schedule 05.05.2015