一、system.out.println()作用
在Java编程中,我们常常用 System.out.println(); 来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢?
System就是java.lang里面的一个类
我们把黄色部分翻译一下就是“系统类包含几个有用的类字段和方法。它不能被实例化。系统类提供的工具包括标准输入、标准输出和异常输出流;访问外部定义的属性和环境变量;加载文件和库的方法;以及快速复制数组一部分的实用方法。”
Crtrl+鼠标点击“out”进入查看“out”在System类里面充当的角色
我们发现,“out”是System类里面的一个静态数据成员,而这个成员是java.io.PrintStream类的引用。如下图,被关键字static修饰的成员可以直接通过"类名.成员名"来引用,而无需创建类的实例。所以System.out是调用了System类的静态数据成员out。 而println()又是java.io.PrintStream类里的一个方法。
println()在
二、system.out.println()输出对象的原理
我们知道,其实对象就是引用,那么我理解如果要把对象输出,结果肯定是一串内存地址,就像这样的。这里定义了一个字节数组对象,输出这个字节数组对象,就是输出了这个对象的引用地址
那么为什么有些System.out.println()输出的不是内存地址内,比如输出字符串,看下面的例子,输出的是“hello”字符串,为什么不是内存地址呢?
原因是没有重写对象的toString()方法,println方法中:
调用了String.valueOf(x)方法,而valueOf()方法中:
调用了相应对象的toString()方法,如果你没有重写对象toString的方法,默认使用父类object的toString的方法:
public String toString() {
return getClass().getName() + “@” + Integer.toHexString(hashCode());
}
所以我们在上面字符串的例子上可以看到,输出的是“hello”,而不是内存地址。是因为String类重写了toString方法
三、举一反三,new File对象,进行输出是什么?
我们首先去看File类有没有重写toString方法,查看File.class得知,也重写了
所以我们判断输出的是文件路径,通过下面的例子我们来验证一下
好了,这就是我们今天讲解的关于system.out.println()的一些理解!