System.in输入流问题,in类成员属性实例化成为了InputStream
问题描述:
java中在System类中in字段被声明为InputStream类的实例化对象,但是InputStream类为抽象类
应该是无法别实例化的,为什么在System类中被实例化了呢?
答
在System类中是这样定义in的。
public final static InputStream in = nullInputStream();
nullInputStream是这样实现的:
private static InputStream nullInputStream() throws NullPointerException {
if (currentTimeMillis() > 0)
return null;
throw new NullPointerException();
}
他不是返回null,就是抛出异常,如何初始化in呢?又如何去调用一个抽象方法read()呢?这是个
有趣的问题.不过写java.io相关的应用其实不需要去关心这个问题的.
但我想还是解释一下我对这个out,in的初始化的理解好了
我也看了一下java.lang.System的源代码.
System类里有大量的native方法,是调用本地代码的,这些代码很可能是由虚拟机来调用的.