为什么System的out被final修饰了, 还能获取实例
解决方案 »
- 求助 java 消息如何存入队列
- 关于多线程的练习题的程序思想
- 菜鸟咨询下 public 后面加了个泛型 是什么意思?
- java swing里组件的机构说明
- 北京通融通信息技术有限公司(易宝支付)笔试!
- 如何用电脑向手机发短消息?
- 用session.getAttribute("aa")得到的值是Object型的,如何把得到Object型的值转换成Long型的?
- 怎样在一个TextField()中,从它的右端输入文字.向各位高手求解
- url传递中文参数的问题,请教
- 请高手帮我解释解释!一定给分!
- 微服务部署到docker中无法访问
- charAt() String index out of range: 0
看了下System的源码,可以看到在类初始化时有一个static的初始化
static {
registerNatives();
}
这个初始化里应该对out的示例做了赋值,这是其一;正常的final示例是无法创建setter的,但是在System中有一个setOut的方法,里面也是调用了一个private static native void setOut0(PrintStream out);的方法,这是其二。由此可以看出final的语义是只针对Java语言来说的,Java底层是可以通过native的方式来违反这个语义的。
private static native void setOut0(PrintStream out);