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

   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,可以是很多种异常)放在后面。

你可能感兴趣的:(java的异常捕获中可能出现的小问题)