3.2 Scanner类
System 类还提供了特殊值 System.in,这是一个 InputStream,提供了从键盘读取输入的方法。这些方法用起来并不那么容易,好在 Java 还提供了其他类,从而能更容易地处理常见的输入任务。
例如,Scanner 类提供了输入单词、数字和其他数据的方法,其包含在 java.util 包中。java.util 包含的类很有用,因此被称为“实用类”。在使用 Scanner 之前,必须先像下面这样导入它:
import java.util.Scanner;
这条导入语句(import statement)告诉编译器,当说到 Scanner 时,你指的是 java.util 中定义的 Scanner。必须将这一点传达给编译器,因为其他包中可能也存在 Scanner 类。使用导入语句可避免代码存在二义性。
导入语句不能存在于类定义中。根据约定,它们通常位于文件的开头。
接下来,你需要创建一个 Scanner 对象:
Scanner in = new Scanner(System.in);
这行代码声明了一个名为 in 的 Scanner 变量,并新建了一个 Scanner 对象以便从 System.in 获取输入。
Scanner 提供了方法 nextLine,这个方法从键盘读取一行输入,并返回一个 String。下面的示例读取了两行,并向用户显示了它们:
import java.util.Scanner;public class Echo {public static void main(String[] args) {String line;Scanner in = new Scanner(System.in);System.out.print("Type something: ");line = in.nextLine();System.out.println("You said: " + line);System.out.print("Type something else: ");line = in.nextLine();System.out.println("You also said: " + line);}}
如果你在没有包含上述导入语句的情况下引用 Scanner,编译器将显示一条类似于 cannot find symbol(找不到符号)的消息,这意味着编译器不知道你说的 Scanner 指的是什么。
你可能会心存疑惑,为何不用导入 System 就能使用它呢? System 位于可自动导入的 java.lang 包中。Java 文档指出,java.lang 提供了 Java 编程语言中的基本类。String 类也位于 java.lang 包中。
