Using reflection and also from the src.zip available in the installed JDK by the installer purveyed by http://docs.oracle.com, I found the following fields of java.la
in the source code, they are not reassigning for example out variable in the setOut() method
public static void setOut(PrintStream out) {
checkIO();
setOut0(out);
}
they send the passed stream to native code, and that code is responsible to set that stream for current use. So final variable is not being re-set and this variable is not used in native code, whatever stream it passes to native code , it uses that