System.out.println中out为null,println究竟怎样执行的呢

  • Post author:
  • Post category:其他


System.out.println中out为null,println究竟怎样执行的


1. System和out

首先,System是java.lang包中的一个类,该类中定义了一个PrintStream类型的常量out,并且赋值为null,如下图。


2. println()


3.


最终原因

如果System.out是null的话,最后肯定是没法调用PrintStream非静态方法的,而且out是public static final修饰,在赋值null后是没法修改和赋值的,所以out肯定是在哪里有设置。不知道你是否有了解过Java里native标识符修饰的方法,native修饰的方法说明方法实现部分不在当前文件在,而是调用C++的动态链接库,因为Java的底层使用C++编写的,所以在底层与系统硬件打交道时,虚拟机JVM通过C++的动态链接库来实现和操作系统的交互。而且System类的顶部有静态代码块,静态代码块中有registerNative()方法,而且该

静态代码块

会在

程序加载时执行

,所以系统会在程序运行前先对out进行操作,实际上out不再等于null。



版权声明:本文为u014163736原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。