java的异常捕获中可能出现的小问题

本文通过一个具体的Java代码示例,详细解析了Java中异常处理的流程及catch子句中异常类放置顺序的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   1:  public int exTest(){
   2:      int x = 0;
   3:      try{
   4:          
   5:          String y = null;
   6:          y.codePointAt(1);
   7:          x=1;
   8:          System.out.println("hello");
   9:          
  10:      }catch(NullPointerException ne){
  11:          ne.printStackTrace();
  12:          x=2;
  13:      }catch(Exception e){
  14:          e.printStackTrace();
  15:          x=3;
  16:      }        
  17:      return 0;
  18:  }

java中的异常捕获很有用。可是,异常的抛出和捕获在实际运用过程中可能会让人觉得有点迷糊,可能你的程序并没有按照你所期望的顺序进行。

如上面代码所示。

异常发生在第6行,一个null值对象调用了codePointAt函数。这样会抛出一个NullPointerException异常。但是最后x的值是多少?

捕获异常的类中Exception包含了NullPointerException异常。

当catch子句捕获到NullPointerException异常后,将x置为2!

由于已经捕获了NullPointerException异常,因此直接跳出catch子句跳到第17句。因此x最后的值是2,而不是3!

这个例子说明了catch子句中异常类放置的先后顺序对异常捕获的流程是有影响的!应当把特殊异常放在前面,而一般异常(如Exception,可以是很多种异常)放在后面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值