《Java 7程序设计入门经典》一3.1 从键盘输入字符

3.1 从键盘输入字符

到目前为止,本书中的示例程序都向用户显示信息,但不从用户接收信息。于是,只使用了控制台输出,没有使用控制台输入(即键盘输入)。主要原因在于,许多Java输入需要依赖和使用本书还未讲到的特性。这些特性在后面才会提及。另外,在真实情况下,许多Java程序和applet是图形界面或是窗口界面的,而不是控制台的。因此,本书的例子很少使用控制台输入。但是,有一种控制台输入相对容易使用,那就是从键盘读入字符。因为本章有许多需要用到这个特性的例子,所以在这里讨论它们。
我们将用System.in.read()方法来从键盘读入字符。System.in是System.out对应的对象。这是一个附着到键盘的输入对象。read()方法等待用户按键,并在用户按键后返回结果。字符以整数形式返回。所以,如果要将其赋给char型变量,必须使用强制类型转换。默认情况下,控制台的输入是行缓冲的(line buffered)。这里,术语“缓冲”(buffer)指的是一小部分用来在程序读取字符前保存字符的内存。在这个情况下,缓冲区存储一整行文本。由于缓冲了整行文本,因此必须在输入字符后敲击回车键才能将文本送入程序。下面的程序演示了如何从键盘读入字符。
《Java 7程序设计入门经典》一3.1 从键盘输入字符

以下是示例的运行结果。
《Java 7程序设计入门经典》一3.1 从键盘输入字符

注意,在程序中main()方法的开头如下所示:
《Java 7程序设计入门经典》一3.1 从键盘输入字符

因为使用了System.in.read(),所以程序必须指定抛出异常的语句throws java.io.IOException。这行代码对处理输入错误是必要的。这是Java的异常处理机制的一部分,将在第10章讨论。现在不需要关心它的精确意义。
有时,System.in的行缓冲特性会带来烦恼。当按回车键时,会往输入流输入回车符和换行符。在一些系统中,只会输入换行符。另外,在读取字符前,后来的字符不断追加到前面的输入缓冲中。于是,对于一些应用,需要在下次输入前通过读取字符来移除它们。在本章后面将会看到这样的例子。
《Java 7程序设计入门经典》一3.1 从键盘输入字符
《Java 7程序设计入门经典》一3.1 从键盘输入字符