查看JDK文档中,确实是out是常量(public static final PrintStream out),但文档中又说,out是在 System 类提供的标准输出流。该流已打开并准备接受输出数据。通常,该流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。看到这里也确实范晕了。既然是常量,怎么可以重定向呢?
接着,有百度了一下,楼主的这个问题百度里面有人问过,有人是这么答的:out是system类的一个静态成员变量,类相当于JAVA里面的一个类型,不要以为变量只有整型,字符串,浮点型这些,类也算是一种类型,所以这里的out其实是一个PrintStream类型,看API就明白.而这个类里面就提供了println这个方法。
这么看,也有人认为这个语句里面的out是变量,但是明明用final修饰的,于是又再重新学习了fianl的知识,看是否有知识点的遗漏。
果然发现final有这么一点知识:final定义的变量,其不可改变的意思是对基本类型来说其值不可改变,而对于对象变量来说其引用不可再变。PrintStream是其引用的一个类对象,只要保持这个类对象不变,调用PrintStream中的方法就是合理的了。
综上,System.out.println()中"out"应该理解为PrintStream类对象常量,这样,调用它中的println方法也就是合理的了。 |