黑马程序员技术交流社区
标题:
System类的一个疑问?
[打印本页]
作者:
严露华
时间:
2013-4-24 22:50
标题:
System类的一个疑问?
本帖最后由 严露华 于 2013-4-26 07:33 编辑
在System类中,我们会发现有一个setOut方法,它可以将System.out(查阅jdk文档可知,System.out为public static final
PrintStream
out)
设置为不同的流。那么,为什么这个方法可以修改final变量的值呢?
作者:
breeze
时间:
2013-4-25 12:44
本帖最后由 breeze 于 2013-4-25 12:46 编辑
因为out是引用,它指向的对象的地址是不可变的,但是对象本身是可变的,setOut 是将out 指向的对象重新指向新的引用将对象的内容改变了,而不是改变out 指向的地址,这个是不能变的,out 还是指向原来对象的地址,但是对象内容已经改变
作者:
续圆凯
时间:
2013-4-25 12:47
在system类中有setout方法即:
public static void setOut(PrintStream out)
{
checkIO();
setOut0(out);
}
调用了setout0()方法,而知道setout方法是重置输出流的对象的,
因此虽然看不到setout0的细节,但是因为setout调用了setout0,
可以大致猜到setout0是通过调用底层的代码实现对out的流的重定位的,
而initializeSystemClass()这个函数也调用了setout0将文件封装成文件流,
再封装成缓冲流,再封装成打印流,最后通过setout0将out与这个流绑定。
具体解释 请看18期的这个帖子的9楼。。。将这里的细节的前世今生解释的很清楚了{:soso_e113:}
http://bbs.itheima.com/thread-40977-1-1.html
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2