今天在类的继承学习中老师重写了toString方法,后来在调用过程中发现,直接打印对象,就会获得对象的信息,下例
当我们在测试类中打印Student对象会发现
```java
public class PersonTest {
public static void main(String[] args) {
System.out.println(new Student());
Student st = new Student("wei", "man", 20, "china", "qinghua", "002");
System.out.println(st);
}
}
```
直接调用了`toString()`方法。
这使我产生了很大的疑问,
`System.out.println()`是怎么调用`toString`方法的?
后来去网上查找了资料才知道。
Systeme类中的out字段是标准输出流,out是static PrintStream类型的,PrintStream类有println函数,其重载形式有参数是Object的
查找API文档后发现有这个方法:
```java
public void println(Object x)
打印 Object,然后终止该行。此方法首先调用 String.valueOf(x) 获取打印对象的字符串值,然后的行为如同先调用 print(String) 再调用 println() 一样。
```
打印对象是调用了`String.valueOf(x)`方法。查找文档
```api
public static String valueOf(Object obj)
打印 Object,然后终止该行。此方法首先调用 String.valueOf(x) 获取打印对象的字符串值,然后的行为如同先调用 print(String) 再调用 println() 一样。
返回 Object 参数的字符串表示形式。
参数:
obj - 一个 Object
返回:
如果参数为null,则字符串"null";否则,返回 obj.toString() 的值。
``` |