加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java 使用Scanner时的NoSuchElementException异常

发布时间:2020-12-15 07:27:11 所属栏目:Java 来源:网络整理
导读:做实验时设计了一个类,在类中的两个不同函数中分别创建了两个Scanner对象,并且在各个函数的结尾使用了close()方法,结果在运行时产生了NoSuchElementException异常。 实验的中的类和下方代码差不多,记录一下异常的原因。 1 package Test; 2 3 import java

  做实验时设计了一个类,在类中的两个不同函数中分别创建了两个Scanner对象,并且在各个函数的结尾使用了close()方法,结果在运行时产生了NoSuchElementException异常。

  实验的中的类和下方代码差不多,记录一下异常的原因。

 1 package Test;
 2 
 3 import java.util.Scanner;
 4 
 5 public class Main {
 6 
 7     public static void main(String[] args) {
 8         Info info = new Info();  //实例化Info对象,调用两个方法
 9         info.test1();
10         info.test2();
11     }
12 
13 }
14 
15 class Info{
16 
17     public void test1(){
18         Scanner scan = new Scanner(System.in);  //创建第一个Scanner对象
19         String info = scan.next();
20         System.out.println(info);
21         scan.close();                 //在结尾使用close()关闭Scanner
22     }
23 
24     public void test2(){
25         Scanner scan2 = new Scanner(System.in);  //第二个Scanner对象
26         String info = scan2.next();
27         System.out.println(info);
28         scan2.close();
29     }
30 }

运行结果:

12
12
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1371)
at Test.Info.test2(Main.java:26)
at Test.Main.main(Main.java:10)

Process finished with exit code 1

===============================================================

  在网上查找资料后发现,System.in在源码中是这样定义的:

    public final static InputStream in = null;

  System.in是静态的,当前类中所有System对象共享,在使用close()方法时,会同时关闭Scanner和System.in,而System.in关闭后不能再打开,当第二个函数再次想实例化Scanner时就会抛出NoSuchElementException异常。

  解决方法是在主方法中调用方法时在参数中传入Scanner对象,或者在类中最后关闭Scanner。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读