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