其次,如果将try里面的语句改为int[] a=null;,为什么还是没有正常输出“错误类型:空引用!!!!”语句????public class Sample6_7{public static void main(String []args){try{int[] a=new int[3];a[2]=1;}catch(Exception e){e.printStackTrace();}catch(NullPointerException npe){System.out.println("错误类型:空引用!!!!");}}}
2 回答
子衿沉夜
TA贡献1828条经验 获得超3个赞
你的代码逻辑错了。NullPointerException是Exception的子类。
捕获异常的范围应该从小到大,你这样捕获的话,直接走第一个Exception。
所以是不会被NullPointerException捕获到的。
try{
int[] a=new int[3];
a[2]=1;
} catch(NullPointerException e){
System.out.println("错误类型:空引用!!!!");
e.printStackTrace(); }
catch(Exception e){ e.printStackTrace(); }
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
因为NullPointerException继承了Exception,所以能被NullPointerException捕获的异常肯定能被Exception捕获。
所以即使有空指针异常,肯定也是被Exception捕获,后面的catch语句就什么都捕获不到了。
解决办法:要么把catch(NullPointerException npe){}写在前面,要么直接去掉
- 2 回答
- 0 关注
- 1769 浏览
添加回答
举报
0/150
提交
取消