在查看java.lang.System类的实现时,我发现:
public final static PrintStream out = null;
仅从该定义中,我就可以看出 的值System.out将始终为null。但是,它在程序启动时被初始化(使用System.initializeSystemClass()JVM 自动调用的方法),我可以使用 更改其值System.setOut,执行安全检查,然后将调用委托给setOut0方法,该native方法是更改值的方法的System.out。为什么System.out即使它被声明我也可以改变它的值final?