日期:2014-05-20  浏览次数:20762 次

System.in对象是怎样初始化的
不知道大家看了System类的源码没有,有个问题始终不懂,还望大家能提点下!
Java code

public final static InputStream in = nullInputStream();
private static InputStream nullInputStream() throws NullPointerException {
    if (currentTimeMillis() > 0) {
        return null;
    }
    throw new NullPointerException();
}


当调用System的静态属性或方法时会初始化里面所有的属性,其中in对象是由静态方法nullInputStream()初始化的,可我不知道这个方法到底启什么作用?in对象到底是怎么初始化的,难道是通过调用native的方法获得的?

------解决方案--------------------
是通过native方法初始化的。
实际上,从java代码中可以跟踪出来,java代码是将System.in初始化为null了。因为in是final的,java语言级别是不能修改的,所以只能通过native方法重新绑定到系统输入。
------解决方案--------------------
《JAVA2核心技术》,小字内容对这个有介绍,2l大虾正解。