System.out 对象的初始化

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/z_yemu/article/details/89309398

闲心大家也跟我一样,在看 System 类时,都看不出 out 对象是什么时候被初始化的
出 out 对象是什么时候被初始化的,准确来说,system 所有的 out、in、err 都是没看到被初始化过。
截取 java8 System 类中的代码

private static native void registerNatives();
    static {
        registerNatives();
    }
    public final static InputStream in = null;
    public final static PrintStream out = null;
    public final static PrintStream err = null;
    ...

其实除初始化的代码就是这个静态代码块

static {
      registerNatives();
  }

可以看到在 registerNatives 方法前有个关键字 native, native 的意思就是通知操作系统,这个函数你必须给我实现,因为我要使用。所以native关键字的函数都是操作系统实现的,java只能调用。是用来 java 与其他语言协作开发时用的,如 C++。所以 输入输出 等是
使用静态代码块加载原生方法进行实现的。

展开阅读全文

没有更多推荐了,返回首页