java中如何抛出异常后继续运行

2025-03-29 11:10:39
推荐回答(5个)
回答1:

出现InputMismatch后一直循环:
当某一扫描器抛出 InputMismatchException 时,该扫描器不会传递导致该异常的标记,因此可以通过其他某种方法来获取或跳过它。
这是java API文档中的原话。意思是说,如果nextInt方法没有成功解析出一个整数,那么你的输入不会被忽略。因为它或许能被其它格式解析。
那么你的程序中输入了a后,出现异常,number被赋值100,开始下一次循环,但这时数据缓冲区内你上次输入的a还在,并没有清除,这时继续解析a,还是错误,于是这个过程就一直重复下去了。
现在你要改的是,出现错误把这次的输入清除,只要在catch中,加一句:input.next()就搞定了!
也可以将Scanner写在try里面

回答2:

结合前面的回答,我写了一下。sc.next()这句很重要,要不然会一直读那个错误的输入。

  //求输入的所有整数的和,当输入999时终止输入,并输出求和
  Scanner sc = new Scanner(System.in);
  //记录每一个整数的值
  int item = 0;
  //记录最后的求和
  int sum = 0;
  while(true) {
   try {
    item = sc.nextInt();
    if(item == 999) {
     break;
    }
   } catch(InputMismatchException e) {
    System.out.println("注意输入整数,请重新输入");
    //下面这句很重要。如果没有这句,缓冲区里一直会读错误的那个值,并且一直输出 上面所写的"注意输入整数,请重新输入"
    sc.next();
    continue;
   }
   sum += item;
  }
  
  System.out.println("sum:"+sum);

回答3:

抛出异常后程序就中断了,不能继续执行,可以在try{}catch(Exception e){}finally{
执行业务逻辑}。只有这种在finally中谢代码 才可以把异常屏蔽掉

回答4:

java的异常处理机制,try···catch···finaly,继续运行的写在finaly里就好了。

回答5:

将想要在异常抛出之后还要运行的代码部分放到finally{}里面