clam1234
clam1234
2015-12-27 09:05
采纳率: 100%
浏览 2.1k
已采纳

System.in输入流问题,in类成员属性实例化成为了InputStream

java中在System类中in字段被声明为InputStream类的实例化对象,但是InputStream类为抽象类
应该是无法别实例化的,为什么在System类中被实例化了呢?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • hgq0916
    奔腾的野马 2015-12-27 16:40
    已采纳

    在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方法,是调用本地代码的,这些代码很可能是由虚拟机来调用的.

    点赞 评论
  • devmiao
    devmiao 2015-12-27 10:44
  • mo_fan_qing_wa
    modelfrog 2015-12-27 13:13
    点赞 评论

相关推荐