Java的System.out.println()深入解析理解
在Java程序(特别是控制台)中常用System.out.println()
语句来输出信息,从开始学习Java就知道用它来输出Hello World,没有深究其实现原理,现在查阅文档、源代码后记录一下。
首先查阅文档和源码可知System
是java.lang
包里的一个final
类,而每个Java程序是默认import java.lang.*
的,因此即使程序中没有手动导入,也可访问到System
类。
main()
方法是static
修饰的,根据Java语法,它只能调用static
方法和变量,那么查看System
类的源码有public static final PrintStream out = null;
这一行,说明System.out
是public
和static
的,因此能在main()
中访问。
System.out
是一个PrintStream
类型的变量,而在PrintStream
中有多个print()
和println()
方法重载,因此可输出多种类型的数据。
继承关系如图所示,所有类都间接或直接继承Object
类。
想必还有一个疑问,就是System
类中public static final PrintStream out = null;
,那么out
变量是在哪里、什么时候初始化,从而可以直接使用的呢?因为out
是static
变量,我们通过System.out
(类名.变量名)的方式调用,再查看System
类源码可发现在static{}
代码块中调用了registerNatives()
,而native
方法registerNatives()
由C/C++实现,这里只是一个接口,在System
类第一次被加载时,调用这个方法将out
变量进行了初始化,让它指向控制台,于是就可以直接使用了。
看到这里,似乎还有println()
方法没有研究。
查看java.io
包中的PrintStream
类寻找println()
方法,可以看到有形参为boolean、char、int…等类型的println()
的重载,而println()
其实调用了print()
再调用newLine()
来实现换行。
而在不同类型形参的print()
方法中,除char[]
变量,都调用String.valueOf()
转换成String
再传递给write()
方法。
而在write()
方法中,调用textOut.write()
来输出字符串。
而textOut
是在PrintStream
中声明的BufferedWriter
类型变量。下面还有一行private OutputStreamWriter charOut;
接着看,在构造方法中,先是初始化了OutputStreamWriter
类型变量charOut
,再用它初始化textOut
。
至此可以清楚,System.out.println()
或System.out.print()
(不换行),其实最终调用了Writer
类中的write()
方法进行字符流输出,只是整个过程封装了许多方法来支持各种类型的变量、以及自动初始化等,使得用户能够方便快捷在控制台打印数据。
有不妥之处欢迎补充纠正。
Java的System.out.println()深入解析理解相关推荐
- java 里面write,java 中 System.out.println()和System.out.write()的区别
java 中 System.out.println()和System.out.write()的区别. 这两个函数一个是System.out.write()输出字符流,System.out.printl ...
- JAVA中System.out.println和System.out.print有什么区别
java里常用的控制台输出语句有System.out.println和System.out.print 一:两者之间的区别如下: 1. 参数有区别: System.out.println() 可以不写 ...
- System.out.println()的正确理解
System.out.println(); 初学的时候对这个语句很是困惑,查了很多资料多半都是说的模棱两可,先入为主.但是它到底要怎么去理解呢? 由字面意思我们很容易得出pintln()是一个方法,被 ...
- Java中System.out.println()简单简介
System.out.println() 用于打印传递给它的参数. 该声明可以分为三个部分,可以分别理解为: 1.System:这是Java.lang包中定义的最终类 2.out:这是PrintStr ...
- Java中 ”System.out.println()”自带换行
Java中,System.out.println()竟然自带换行 不想带换行就用System.out.print(); public class ShuZu1 {public static void ...
- java中system.out.println()是什么意思【笔记自用】
在Java编程中,我们常常用System.out.println()方法来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢? 这里就涉及用到一个stat ...
- JAVA的System.out.println和System.out.printf之间有什么区别?
平时我们编写代码大多都是使用System.out.println或者System.out.print. printf???相信学过C语言的应该知道这个输出语句关键字. 那java中的System.ou ...
- 【Java】System.out.println(Integer.MAX_VALUE+1);背后的二进制故事与启示
导言 [说明]这里的代码用Java语言描述,工具为Jshell,但原理是通用的. 迷幻语句送上-- System.out.println(Integer.MAX_VALUE+1); 执行结果是什么? ...
- java 将System.out.println到控制台的内容打印并保存在txt
问题解决: 方法一:命令行运行Java在末尾加上> name.txt,表示创建并输出到name.txt,>> name.txt表示在原有name.txt中追加输出信息 方法二: // ...
最新文章
- 如何有效实现软件的需求管理(6)
- 一套完整的防火墙系统通常是由屏蔽路由器和代理服务器组成
- 博士申请 | 加拿大麦吉尔大学丁俊老师招收机器学习全奖博士/硕士/实习生
- 今晚直播 | 商汤科技X-Lab刘宇:神经网络结构与大规模优化方法
- controller怎么调用controller_SpringMVC五大核心组件及调用过程
- MySQL优化大总结
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第15篇]RSA-OAEP和ECIES的密钥生成,加密和解密
- DirectX11 With Windows SDK--12 深度/模板状态、平面镜反射绘制
- 创业失败三年后,这个曾经的富二代变得一无所有
- vmware中的linux虚拟机如何增加磁盘容量
- 探索“云计算”的双重含义(节选)
- prototype.js学习(1)
- Python求水仙花数
- hp刀片服务器性能分析,IBM刀片服务器与高性能计算-20210723075634.ppt-原创力文档...
- python get rect 函数_Pygame:如何正确使用get_rect()
- Cocos Creator性能调优优化集锦
- 判断将输入字母,进行大写转小写,小写转大写
- 工作随记-Java利用企业微信群机器人定时发送消息
- 阿里云服务器自动备份
- Error Correction
热门文章
- 实现textarea换行的内容在列表展示时也换行
- 重庆警方2018年破获电信网络诈骗案5万余起 冻结资金5.19亿元
- 【失业即将到来?】AI时代会带来失业潮吗?
- php instanceof not,php instanceof
- ResNet DenseNet(实践篇)
- linux 卸载cups,Linux安装卸载软件
- (五)OpenCV | 斑点中心检测(图像矩)
- 用python画蝴蝶_Kittenblock画笔基础,移动留下痕迹的蝴蝶,图形化编程经验分享...
- Promise/Deferred模式
- python画图配色总结