Java中NoSuchElement异常原因解释
- 前言
在调用由Scanner(System.in)实例化对象的Next()时抛出异常 - 结论
/*Scanner 的next() 抛出 NoSuchElement异常的解释
*System.in的定义为Static 在同一个类中共享其资源
*若被调函数中创建了封装System.in的Scanner对象,并在其中关闭该对象
*主函数创建的Scanner对象资源也被关闭
*故被调函数的后续代码中使用Scanner对象输入时会产生异常
*解决办法:允许主函数以外的被调函数未关闭Scanner对象的警告
*仅在主函数的类中,最后一次使用Scanner对象后关闭
*/ - 验证
Scanner()和System.in的定义
Scanner(File source)
构造一个新的 Scanner,它生成的值是从指定文件扫描的。
public static final InputStream in
创建类Testx
public class Taskx {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = 5;
Testy t = new Testy();
while(count-->0) {
System.out.println(sc.next());
if(count==3)
t.fun2();
}
sc.close();
}
}
新建类Testy
public class Testy {
public void fun() {
Scanner scy = new Scanner(System.in);
scy.close();
}
}
执行结果

可以看到输入两次后,调用了Testy的fun(),该方法中关闭了Scanner对象,后续代码执行抛出异常;
如果去掉fun()中的scy.close(),异常就不存在了。
本文深入探讨了Java中NoSuchElementException的产生原因,特别是在使用Scanner(System.in)进行输入时的情况。文章通过实例说明,当在被调用的方法中不当关闭Scanner对象,会如何影响主函数的正常使用,导致异常抛出。
1580

被折叠的 条评论
为什么被折叠?



