在Java编程中,从键盘输入整数是基础且常见的操作,尤其对于初学者而言,掌握这一技能至关重要,本文将详细介绍多种实现方式,从传统的Scanner类到现代的BufferedReader类,再到Java 9引入的Console类,帮助读者全面理解不同方法的适用场景与实现细节。

使用Scanner类实现键盘输入
Scanner类是Java 5引入的一个便捷工具,位于java.util包中,广泛应用于获取用户的键盘输入,它提供了多种方法来读取不同类型的数据,包括整数、浮点数、字符串等,使用Scanner读取整数的基本步骤如下:
- 导入Scanner类:在代码开头添加
import java.util.Scanner;语句,以便使用Scanner功能。 - 创建Scanner对象:通过
Scanner input = new Scanner(System.in);创建一个与标准输入流(即键盘)关联的Scanner对象。 - 读取整数:调用
nextInt()方法读取用户输入的整数。int number = input.nextInt();。 - 关闭Scanner:使用完毕后,通过
input.close()关闭Scanner以释放资源。
需要注意的是,nextInt()方法在读取输入时,如果用户输入的不是有效的整数(如字母或符号),程序会抛出InputMismatchException异常,在实际开发中,通常需要结合异常处理机制来增强程序的健壮性,可以使用try-catch块捕获异常,并提示用户重新输入。
Scanner类还提供了hasNextInt()方法,用于检查输入流中是否还有有效的整数数据,这可以在循环中用于验证用户输入的有效性,在循环中使用while (!input.hasNextInt())来判断用户是否输入了非整数,并提示用户重新输入。
使用BufferedReader类实现键盘输入
BufferedReader类是Java IO库中的一个重要类,位于java.io包中,与Scanner相比,BufferedReader的读取效率更高,因为它采用了缓冲机制,减少了直接读取输入流的次数。BufferedReader的readLine()方法只能读取字符串,因此需要额外的步骤将字符串转换为整数。
使用BufferedReader读取整数的步骤如下:

- 导入BufferedReader和InputStreamReader:添加
import java.io.BufferedReader;和import java.io.InputStreamReader;语句。 - 创建BufferedReader对象:通过
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));创建对象,其中InputStreamReader用于将字节流转换为字符流。 - 读取字符串并转换为整数:调用
reader.readLine()读取用户输入的字符串,然后使用Integer.parseInt()方法将其转换为整数。int number = Integer.parseInt(reader.readLine());。 - 处理异常:
Integer.parseInt()方法在输入不是有效整数时会抛出NumberFormatException异常,因此需要使用try-catch块进行处理。 - 关闭BufferedReader:使用
reader.close()关闭流。
BufferedReader的优势在于读取大文本数据时性能更优,但在简单的键盘输入场景中,代码量相对Scanner更多,可读性稍差,对于简单的整数输入,Scanner通常是更简洁的选择。
使用Console类实现键盘输入
Java 6引入了Console类,位于java.io包中,它提供了一种更安全、更便捷的方式来处理控制台输入输出,与Scanner和BufferedReader不同,Console类不会直接显示用户输入的字符(例如输入密码时),因此特别适合处理敏感信息。
使用Console类读取整数的步骤如下:
- 获取Console对象:通过
Console console = System.console();获取Console实例,需要注意的是,如果程序在非交互式环境(如IDE)中运行,console可能为null,因此需要进行空值检查。 - 读取字符串并转换为整数:调用
console.readLine()方法读取用户输入的字符串,然后使用Integer.parseInt()将其转换为整数。int number = Integer.parseInt(console.readLine("请输入一个整数:"));。 - 处理异常:同样需要捕获
NumberFormatException异常。 - 无需手动关闭:
Console对象不需要显式关闭。
Console类的优点在于输入时不回显字符,适合安全输入场景,但其局限性在于某些IDE(如Eclipse、IntelliJ IDEA)可能不支持System.console()方法,导致返回null,在实际开发中,如果需要兼容IDE环境,建议优先选择Scanner或BufferedReader。
不同方法的比较与选择
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Scanner | 简单易用,支持多种数据类型 | 效率较低,线程不安全 | 一般的键盘输入,初学者推荐 |
| BufferedReader | 效率高,线程安全 | 代码稍复杂,需手动转换类型 | 大量数据输入,性能要求高的场景 |
| Console | 安全(输入不回显),便捷 | IDE中可能不兼容 | 密码等敏感信息输入 |
对于大多数Java初学者而言,Scanner类是学习键盘输入的最佳选择,因为它简单直观,功能全面,而在需要高性能输入的场景下,BufferedReader则是更优的选择。Console类则适用于需要安全输入的特殊场景,但需要注意运行环境的兼容性。

实践示例与注意事项
以下是一个使用Scanner类读取整数的完整示例代码,包含异常处理和输入验证:
import java.util.Scanner;
import java.util.InputMismatchException;
public class KeyboardInputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = 0;
boolean isValid = false;
while (!isValid) {
try {
System.out.print("请输入一个整数:");
number = scanner.nextInt();
isValid = true;
} catch (InputMismatchException e) {
System.out.println("输入无效,请重新输入一个整数!");
scanner.next(); // 清除错误的输入
}
}
System.out.println("您输入的整数是:" + number);
scanner.close();
}
}
在编写键盘输入代码时,需要注意以下几点:
- 异常处理:始终考虑用户输入非预期数据的情况,使用
try-catch块捕获异常。 - 资源释放:使用完
Scanner或BufferedReader后,务必关闭以避免资源泄漏。 - 输入验证:通过循环和
hasNextInt()等方法确保输入的有效性。 - 环境兼容性:如果代码需要在IDE中运行,避免使用
Console类。
从键盘输入整数是Java编程的基础技能,通过Scanner、BufferedReader和Console类等多种方式可以实现,每种方法都有其独特的优势和适用场景,开发者应根据实际需求选择合适的方式,掌握这些方法不仅能提高编程效率,还能为后续学习更复杂的IO操作打下坚实的基础,在实际应用中,结合异常处理和输入验证,可以编写出更加健壮和用户友好的程序。

















