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