You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java循环内需用户输入时如何正确关闭Scanner?

Java循环内使用Scanner的关闭问题解析

你的代码里while(true)是无限循环,没有任何终止逻辑,导致后续的scan.close()永远无法执行,这就是编译器提示“不可达代码”的原因。下面针对你的疑问逐一解答:

1. 不要将Scanner移至循环内每次迭代关闭

Scanner绑定System.in(标准输入流)时,关闭Scanner会同时关闭System.in。如果在循环内每次创建并关闭Scanner,第一次关闭后System.in就被关闭了,后续再创建Scanner读取输入会直接抛出NoSuchElementException,完全无法正常工作。这种做法绝对不可取。

2. 是否必须关闭Scanner?

分两种情况看待:

  • 若Scanner绑定的是文件、网络连接这类外部资源,必须手动关闭,否则会造成资源泄漏。
  • 若Scanner绑定的是System.in,则无需刻意关闭:System.in由JVM管理,程序退出时会自动回收;且一旦关闭System.in,整个程序后续都无法再读取控制台输入。除非你明确知道程序后续不再需要输入,否则没必要调用scan.close()。

修正后的示例代码

给循环添加终止条件,让scan.close()可以正常执行:

public void closeScanner(){
    Scanner scan = new Scanner(System.in);

    while (true) {
        System.out.println("Please enter something (enter 'exit' to quit):");
        String someThing = scan.nextLine();
        // 设置终止条件,输入"exit"时退出循环
        if ("exit".equals(someThing)) {
            break;
        }
        // 执行其他业务逻辑
        System.out.println("You input: " + someThing);
    }
    // 循环正常退出后,可选择关闭Scanner(非必须)
    scan.close();
}

内容的提问来源于stack exchange,提问作者Derek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:39:54