今天在给论坛里的同学回答输出语句的时候,我也同样搞懂了点关于System.out.println()这个输出语句的点问题。再次与大家分享一下。
System是一个不能被实例化的一个类,out是其的一个static字段,此外还有in,err等字段,这些字段都是static的。api中显示,out,err字段实际就是一个PrintStream类型的对象,
in字段实际就是一个InputStream类型的对象。
而println方法就是在PrintStream类中。
PrintStream类中的println方法有多种重载形式,
这些println方法接收的参数有空参数,boolean,char,char[],double,float,int,long,String,Object等,大家可以到api中查看,这里就不贴图了。
这些println方法会调用相同参数的print方法,print方法又会调用相同参数的String.valueOf,再下来,就会调用相同类型的toString方法将参数转换成字符串,而print就会将返回的字符串转换成字符再转换成字节,最后将字节通过write方法写入流而打印。有个别不会路径完全相同,会跳过一两步。
所以你在println中传入的参数大致会经过以下几个路径;
println----print----String.valueOf----toSring-----write写入流----打印。
大家可以通过重写其中的某个方法来验证一下。
下面有个例子可以说明走了toString方法。
- class test {
- public static void main(String[] args) {
- A a = new A();
- System.out.println(a);
- }
- }
- class A
- {
- public String toString()
- {
- System.out.println("toString");
- return "";
- }
- }
复制代码
运行结果是:
toString
我总结了一下各种参数的println方法的经过路径。如下:这是我的理解。有错误的请大神指正。。
|