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

文章探讨了Java中System类的out常量如何在初始化时避免为null,以及println方法的执行机制。System类的out是publicstaticfinal的PrintStream对象,尽管在类定义时可能为null,但在程序加载过程中,通过静态代码块中的native方法registerNative()确保了它的初始化,这个过程涉及到Java虚拟机JVM与C++动态链接库的交互,保证了输出功能的正常工作。

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。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java邦邦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值