Java OOP - Module3: Lesson 5
Scanner.nextLine()
input.nextInt(); 读取整数后,为什么需要紧接着调用 input.nextLine(),为什么需要这个额外的 nextLine()?
问题的根源
在 Java 的 Scanner 中:
nextInt()读取整数 但不会读取换行符,只读取数值部分。- 用户在输入整数时按下
Enter,这个Enter生成的换行符 (\n) 仍然留在输入流中。 nextLine()读取整行字符串,包括换行符 (\n),所以:- 如果
nextLine()直接跟在nextInt()之后,它会 先读取这个遗留的换行符,导致day变量变成一个空字符串,而不是用户实际输入的星期名称。
- 如果
如何修正?
方法 1(正确方式):添加 input.nextLine(); 以消费掉 \n:
1 | |
方法 2(用 next() 代替 nextLine()) 如果星期名称是单个单词(比如 Monday),可以用 next():
1 | |
但如果用户输入包含空格的字符串,next() 只会读取 monday,而 and 仍留在输入流中。
1 | |
总结
如果 nextInt() 后面要读取整行字符串,必须用 nextLine() 先吃掉换行符,否则 nextLine() 直接读取换行符,导致 day 变量变成空字符串。
通配符导入和具体类导入
在 Java 中,使用 import java.util.*; 这样的 通配符导入(wildcard import)和使用 具体类导入(fully-qualified import,如 import java.util.ArrayList;)在编译后的 字节码(bytecode) 上是完全相同的。这是因为 Java 的 import 语句仅仅是编译器的辅助工具,不会影响运行时的行为。
- import只是告诉编译器使用的类的全名,以方便编译器实际导入使用的类
- 在运行时,Java 通过 类加载器(ClassLoader) 加载类,而不是依赖
import语句 - 唯一的区别是 编译时可能会有一点点额外的处理时间,因为编译器需要查找通配符
import下实际使用的类
Java OOP - Module3: Lesson 5
https://hexwhat.top/2025/03/30/cs1331-1-5/