如你所知,所有的Java程序都会自动导入java.lang包.该包定义了一个名为System的类,他封装了运行时环境的几个要素.他封装了运行时环境的几个要素.其中包含三个预定义的流变量,变量名分别为in,out和err.这些域在System中被声明为public,final和static.这就意味着程序的任何部分都无须引用具体的System对象就可以使用他们.
System.out是标准输出流.默认情况下是控制台.system.in是标准输入流.默认情况下是键盘.System.err是标准错误流.默认情况也是控制台.然而这些流都可以被重定向到任何兼容I/O的设备.
System.in是InputStream类型的对象.System.out和System.err是printStream类型的对象.尽管他们通常用于对控制台读取和写入字符,但这些都是字节流.因为预定义流属于没有包含字符流的Java原始规范,所以他们不是字符流而是字节流.正如你将看到的,如果需要的话,可以将他们打包到基于字符的流中.