多数应用程序在运行过程中要与用户进行交互,通常的交互方式是:用户使用键盘作为标准输入
设备向程序中输入数据,程序利用计算机显示器屏幕做为标准输出设备显示输出数据。这种程序被称为控制台应用程序,这种输入/输出被称为标准I/O或控制台I/O(Input/Output)。
java.lang.System类的三个类成员提供了有关的I/O操作功能:
System.out提供向“标准输出”写出数据的功能,out是System中的一个static final的PrintStream类型变量,它会被初始化关联到运行Java程序的终端窗口。可以通过System类的setOut()方法来改变默认的标准输出流;
System.in提供从“标准输入”读入数据的功能,in是System类中的一个static final的InputStream类型变量,它会被初始化关联到用户键盘。可以通过System类的setIn()方法来改变默认的标准输入流;
System.err提供向“标准
错误输出”写出数据的功能。通常情况下,System.err
使用方法与System.out相同,用于向标准的错误设备输出错误信息,但很少使用。同样可以使用System类的setErr()方法来改变默认的标准错误输出流。
在这里,用到了输入/输出流的概念,关于流的编程,将在后续中详细讲解。
我们来看一个接受键盘输入的Java应用程序。
import java.io.*;
public
class KeyboardInput {
public static void main(String args[]) {
String s;
// 创建一个BufferedReader对象从键盘逐行读入数据
InputStreamReader ir = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(ir);
System.out.println("Unix: Type ctrl-d or ctrl-c to exit."
+ "\nWindows: Type ctrl-z or ctrl-c to exit.");
try {
// 每读入一行,向标准输出设备输出
while ((s = in.readLine()) != null) {
System.out.println("Read: " + s);
}
// 关闭流,这步动作在对流的操作完成后一定要做。
in.close();
} catch (IOException e) { // Catch any IO exceptions.
e.printStackTrace();
}
}
}
编译运行这个程序,它将阻塞等待输入,我们可以通过键盘向它输入数据,这个程序从标准输入中逐行读取输入的数据,然后将它们显示到标准输出中(此处是默认的屏幕)。
在Windows命令行下可以通过按下“
Ctrl+C”来终止这个应用的运行。
下面我们来看如何向标准设备输出数据。其实在前面的章节中,我们已经多次用到这个功能,在此作一个总结。
通常我们使用System.out.println()/System.out.print()两个常用的方法向标准设备输出。println()方法将参数打印出来,并加上”\n”字符,也就是换一个新行。而print()方法只打印参数,但不加新行。
另外,System.out.print()和System.out.println()方法对多数简单数据类型 (boolean, char, int, long, float, double)和char[], Object以及String进行了
重载,使得它们可以向外输出所有的数据类型数据。
需要注意的是,print(Object)或println(Object)将会调用Object对象的toString()方法,输出表示对象的字符串。
下面我们来看一个项标准设备输出数据的
例子。
public class Echo {
public static void main(String args[]) {
int a = 100;
boolean b = true;
System.out.print("echo an int primitive type data:");
System.out.println(a);
System.out.print("echo a boolean primitive type data:");
System.out.println(b);
System.out.print("echo an object:");
Object o = new Object();
System.out.println(o);
}
}
在这个程序中,向标准输出设备输出两种简单类型的数据:int和 boolean,以及一个Object,正如上面所述,System.out的这些println()方法都已经针对不同的数据类型进行了重载,所以可以直接使用。而对于引用类型数据,它会调用该对象上的toString()方法,将这个方法返回的表示该对象的字符串打印出来。