Я просмотрел исходный код 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), и поинтересовался, что тут творится волшебства, и как я могу переназначить значение финальной ссылке.
final
действительно применяется только к уровню Java. Вероятно, они были установлены из собственного кода в очень ранний момент времени. Я предполагаю, что единственная цель присваивания - заткнуть компилятор из-за того, что конечная переменная никогда не назначается. - person Wormbo   schedule 05.05.2015