开发者社区> 问答> 正文

System.in输入流问题

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

展开
收起
蛮大人123 2016-03-25 17:14:16 1915 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

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

    2019-07-17 19:14:45
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载