Java异常及错误汇总

异常

2021-04-23

java.util.NoSuchElementException:没有这个对象。

错误原因是在代码中错误提前关闭了System.in流。System.in流是一个final对象,一旦被close就无法再行初始化,从而导致异常。

对于Java提供的IO包中,一般都会处理资源级联关闭。即关闭最外层包装的流,内层被包被的流也会被关闭。

处理手段为:

  1. 在主线程结束的最后才关闭输入流
  2. (此方法转自优快云网友zhuangqingch)想解决关闭Scanner而不关闭System.in。只需要对传入Scanner构造方法的System.in做下包装就可以了。新包装的流要注意:1不产生新的流资源,2、是一个InputStream的实现类。3、close方法为空实现
    可以实现jdk中提供的一个现成类FilterInputStream,它具备上述前2个特点。只需要使用内部匿名类的方式重写下close方法就可以了。具体代码如下:
import java.io.FilterInputStream;
import java.io.IOException;
import java.util.Scanner;

/**
* @author zhuangqing
*/
public class Test {
   public static void main(String[] args) throws IOException {
       testInput();
       testInput();
   }

   public static void testInput() throws IOException {
       //对于传入的System.in做包装
       Scanner scan = new Scanner(new FilterInputStream(System.in){
           @Override
           public void close() throws IOException {
               //do nothing
           }
       });
       System.out.println("请输入一行字符:");
       String str = scan.nextLine();
       System.out.println("输入的字符:" + str);
       scan.close();
   }
}

```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值