在Java程序(特别是控制台)中常用System.out.println()语句来输出信息,从开始学习Java就知道用它来输出Hello World,没有深究其实现原理,现在查阅文档、源代码后记录一下。

首先查阅文档和源码可知Systemjava.lang包里的一个final类,而每个Java程序是默认import java.lang.*的,因此即使程序中没有手动导入,也可访问到System类。

main()方法是static修饰的,根据Java语法,它只能调用static方法和变量,那么查看System类的源码有public static final PrintStream out = null;这一行,说明System.outpublicstatic的,因此能在main()中访问。

System.out是一个PrintStream类型的变量,而在PrintStream中有多个print()println()方法重载,因此可输出多种类型的数据。
继承关系如图所示,所有类都间接或直接继承Object类。

想必还有一个疑问,就是System类中public static final PrintStream out = null;,那么out变量是在哪里、什么时候初始化,从而可以直接使用的呢?因为outstatic变量,我们通过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()深入解析理解相关推荐

  1. java 里面write,java 中 System.out.println()和System.out.write()的区别

    java 中 System.out.println()和System.out.write()的区别. 这两个函数一个是System.out.write()输出字符流,System.out.printl ...

  2. JAVA中System.out.println和System.out.print有什么区别

    java里常用的控制台输出语句有System.out.println和System.out.print 一:两者之间的区别如下: 1. 参数有区别: System.out.println() 可以不写 ...

  3. System.out.println()的正确理解

    System.out.println(); 初学的时候对这个语句很是困惑,查了很多资料多半都是说的模棱两可,先入为主.但是它到底要怎么去理解呢? 由字面意思我们很容易得出pintln()是一个方法,被 ...

  4. Java中System.out.println()简单简介

    System.out.println() 用于打印传递给它的参数. 该声明可以分为三个部分,可以分别理解为: 1.System:这是Java.lang包中定义的最终类 2.out:这是PrintStr ...

  5. Java中 ”System.out.println()”自带换行

    Java中,System.out.println()竟然自带换行 不想带换行就用System.out.print(); public class ShuZu1 {public static void ...

  6. java中system.out.println()是什么意思【笔记自用】

    在Java编程中,我们常常用System.out.println()方法来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢? 这里就涉及用到一个stat ...

  7. JAVA的System.out.println和System.out.printf之间有什么区别?

    平时我们编写代码大多都是使用System.out.println或者System.out.print. printf???相信学过C语言的应该知道这个输出语句关键字. 那java中的System.ou ...

  8. 【Java】System.out.println(Integer.MAX_VALUE+1);背后的二进制故事与启示

    导言 [说明]这里的代码用Java语言描述,工具为Jshell,但原理是通用的. 迷幻语句送上-- System.out.println(Integer.MAX_VALUE+1); 执行结果是什么? ...

  9. java 将System.out.println到控制台的内容打印并保存在txt

    问题解决: 方法一:命令行运行Java在末尾加上> name.txt,表示创建并输出到name.txt,>> name.txt表示在原有name.txt中追加输出信息 方法二: // ...

最新文章

  1. 如何有效实现软件的需求管理(6)
  2. 一套完整的防火墙系统通常是由屏蔽路由器和代理服务器组成
  3. 博士申请 | 加拿大麦吉尔大学丁俊老师招收机器学习全奖博士/硕士/实习生
  4. 今晚直播 | 商汤科技X-Lab刘宇:神经网络结构与大规模优化方法
  5. controller怎么调用controller_SpringMVC五大核心组件及调用过程
  6. MySQL优化大总结
  7. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第15篇]RSA-OAEP和ECIES的密钥生成,加密和解密
  8. DirectX11 With Windows SDK--12 深度/模板状态、平面镜反射绘制
  9. 创业失败三年后,这个曾经的富二代变得一无所有
  10. vmware中的linux虚拟机如何增加磁盘容量
  11. 探索“云计算”的双重含义(节选)
  12. prototype.js学习(1)
  13. Python求水仙花数
  14. hp刀片服务器性能分析,IBM刀片服务器与高性能计算-20210723075634.ppt-原创力文档...
  15. python get rect 函数_Pygame:如何正确使用get_rect()
  16. Cocos Creator性能调优优化集锦
  17. 判断将输入字母,进行大写转小写,小写转大写
  18. 工作随记-Java利用企业微信群机器人定时发送消息
  19. 阿里云服务器自动备份
  20. Error Correction

热门文章

  1. 实现textarea换行的内容在列表展示时也换行
  2. 重庆警方2018年破获电信网络诈骗案5万余起 冻结资金5.19亿元
  3. 【失业即将到来?】AI时代会带来失业潮吗?
  4. php instanceof not,php instanceof
  5. ResNet DenseNet(实践篇)
  6. linux 卸载cups,Linux安装卸载软件
  7. (五)OpenCV | 斑点中心检测(图像矩)
  8. 用python画蝴蝶_Kittenblock画笔基础,移动留下痕迹的蝴蝶,图形化编程经验分享...
  9. Promise/Deferred模式
  10. python画图配色总结