gpt4 book ai didi

java - 未关闭的扫描仪的垃圾收集

转载 作者:行者123 更新时间:2023-11-30 07:20:53 25 4
gpt4 key购买 nike

绕过skipping nextLine() issue ,并且为了使代码更清晰,我是否多次使用了以下方法:

private String getInput() {
return new Scanner(System.in).nextLine();
}

这不是任何生产代码,只是小项目,所以我不太关心这是否会带来性能问题,因为我发现这种方法非常方便。我真的很喜欢对所有输入使用此方法并解析返回值。

对于这个问题 - 这是一种非常糟糕的做法吗?不关闭 Scanner 感觉不太好,但由于该对象超出了我的范围,我一直认为 Scanner 对象应该被垃圾收集,因此也应该关闭。 gc 如何处理这个问题?

最佳答案

在这种情况下,您不能关闭它,否则System.in也会关闭,这样您将无法获得任何新输入,事实上,如果您执行这个简单的代码:

Scanner scanner = new Scanner(System.in);
scanner.close();
scanner = new Scanner(System.in);
scanner.nextLine(); // -> Exception here

您将得到下一个异常:

Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at hello.Application.main(Application.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)

我在你的方法中看到的唯一真正的问题是,如果你在每次调用时创建一个新的 Scanner 实例时定期调用此方法,它可能会效率低下,而且它可能是 JDK特定于实现,因为如果您有一个实现了 finalize 方法的 Scanner 实现,它可能会关闭 Scanner ,从而导致上述错误。

关于java - 未关闭的扫描仪的垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37599067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com