NoSuchElement异常原因解释

本文深入探讨了Java中NoSuchElementException的产生原因,特别是在使用Scanner(System.in)进行输入时的情况。文章通过实例说明,当在被调用的方法中不当关闭Scanner对象,会如何影响主函数的正常使用,导致异常抛出。

Java中NoSuchElement异常原因解释

  1. 前言
    在调用由Scanner(System.in)实例化对象的Next()时抛出异常
  2. 结论
    /*Scanner 的next() 抛出 NoSuchElement异常的解释
    *System.in的定义为Static 在同一个类中共享其资源
    *若被调函数中创建了封装System.in的Scanner对象,并在其中关闭该对象
    *主函数创建的Scanner对象资源也被关闭
    *故被调函数的后续代码中使用Scanner对象输入时会产生异常
    *解决办法:允许主函数以外的被调函数未关闭Scanner对象的警告
    *仅在主函数的类中,最后一次使用Scanner对象后关闭
    */
  3. 验证

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(),异常就不存在了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值