在介绍Java控制语句之前,我们将暂时讨论如何编写交互式程序这一话题。到目前为止,本书的示例程序只是向用户显示信息,还没有从用户接收信息。因此,只用到了控制台输出,还没有使用控制台(键盘)输入。这样做的原因在于现实中的Java程序和applet多是图形化窗口,而不是基于控制台的。然而,有一种类型的控制台输入使用起来比较方便:从键盘读取字符。
从键盘读取字符的最简单的方法是调用System.in.read(). System.in是System.out的补充,是与键盘相连的输入对象。read()方法等待用户按键,然后返回输入结果。被返回的字符是一个整数,所以必须将其强制转换为char变量。默认情况下,控制台输入时行缓冲的,这里的术语“缓冲”指的是在程序读取字符之前用于保存字符的一小块内存。在本例中,缓冲保存完整的一行文本,因此必须按下Enter键才能使键入的任何字符被传送给程序。下面就是一个从键盘读取字符的程序:
public static void main(String[] args) throws java.io.IOException { char ch; System.out.println("Press a key followed by Enter:"); ch = (char) System.in.read(); System.out.println("Your key is:"+ch); }
运行效果如下:
Press a key followed by Enter: a Your key is:a
因为使用了System.in.read(),所以程序必须制定throws java.io.IOException语句。这一行代码是处理输入错误所必须的。
System.in是行缓冲这一事实有时候会造成许多麻烦。当按下Enter键时,一个回车换行序列会进入输入流。而且,这些字符会在存储在输入缓冲中,直到读取他们为止。因此,对于某些应用程序,需要在下一个输入操作之前删除输入缓冲区内容。