3.2 Scanner

System 类还提供了特殊值 System.in,这是一个 InputStream,提供了从键盘读取输入的方法。这些方法用起来并不那么容易,好在 Java 还提供了其他类,从而能更容易地处理常见的输入任务。

例如,Scanner 类提供了输入单词、数字和其他数据的方法,其包含在 java.util 包中。java.util 包含的类很有用,因此被称为“实用类”。在使用 Scanner 之前,必须先像下面这样导入它:

  1. import java.util.Scanner;

这条导入语句(import statement)告诉编译器,当说到 Scanner 时,你指的是 java.util 中定义的 Scanner。必须将这一点传达给编译器,因为其他包中可能也存在 Scanner 类。使用导入语句可避免代码存在二义性。

导入语句不能存在于类定义中。根据约定,它们通常位于文件的开头。

接下来,你需要创建一个 Scanner 对象:

  1. Scanner in = new Scanner(System.in);

这行代码声明了一个名为 inScanner 变量,并新建了一个 Scanner 对象以便从 System.in 获取输入。

Scanner 提供了方法 nextLine,这个方法从键盘读取一行输入,并返回一个 String。下面的示例读取了两行,并向用户显示了它们:

  1. import java.util.Scanner;
  2. public class Echo {
  3. public static void main(String[] args) {
  4. String line;
  5. Scanner in = new Scanner(System.in);
  6. System.out.print("Type something: ");
  7. line = in.nextLine();
  8. System.out.println("You said: " + line);
  9. System.out.print("Type something else: ");
  10. line = in.nextLine();
  11. System.out.println("You also said: " + line);
  12. }
  13. }

如果你在没有包含上述导入语句的情况下引用 Scanner,编译器将显示一条类似于 cannot find symbol(找不到符号)的消息,这意味着编译器不知道你说的 Scanner 指的是什么。

你可能会心存疑惑,为何不用导入 System 就能使用它呢? System 位于可自动导入的 java.lang 包中。Java 文档指出,java.lang 提供了 Java 编程语言中的基本类。String 类也位于 java.lang 包中。