java: «final» System.out, System.in и System.err?

System.out объявлен как public static final PrintStream out .

Но вы можете вызвать System. setOut () , чтобы переназначить его.

А? Как это возможно, если оно final ?

(то же самое относится к System.in и ] System.err )

И что еще более важно, если вы можете изменить общедоступные статические поля final, что это означает в отношении гарантий (если таковые имеются), которые дает вам final ? (Я никогда не понимал и не ожидал, что System.in/out/err ведет себя как final переменные)

75
задан Stephen C 22 August 2011 в 00:58
поделиться