黑马程序员技术交流社区
标题:
catch异常问题
[打印本页]
作者:
高鑫
时间:
2012-5-9 02:43
标题:
catch异常问题
class Demo
{
public int div(int a,int b)throws ArithmeticException,ArrayIndexOutOfBoundsException //声明可能会出现问题
{
int [] arr=new int[a];
System.out.println(arr[4]);
return a/b;
}
}
class ExceptionDemo
{
public static void main(String[] args)
{
Demo d = new Demo();
try
{
int x=d.div(4,0);
System.out.println("x="+x);
}
catch (Exception e)
{
System.out.println("haha:"+e.toString());
}
catch(ArithmeticException e)
{
System.out.println(e.toString());
System.out.println("快零除了");
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println(e.toString());
System.out.println("角标越界了");
}
System.out.println("over");
}
}
复制代码
我看视频中有点没弄明白,把父类异常catch (Exception e)放在最上面的话,为什么编译都通不过?我认为应该是父类异常执行后,下面的2个子类catch就不执行了。为什么通不过呢,是不是我理解错了
作者:
龚振 龚振 龚振
时间:
2012-5-9 03:12
本帖最后由 龚振 龚振 龚振 于 2012-5-9 03:14 编辑
自己的一些理解,供参考噢~
1捕捉异常要尽量具体,尽量详细。如果把父类异常catch (Exception e)放最上面,
那所有异常都被Exception捕捉了,下面的子类无法捕捉,没意义了,不具体,编译也不通过。
2将子类异常放上面,最后加上父类异常catch (Exception e),
还可以对可能存在但又未捕获到的异常通过父类异常catch (Exception e)进行查漏捕获
作者:
黄秋
时间:
2012-5-9 03:29
理由楼上也说了。这是由 java 的规则所定的,如同 return 后面不能有其它语句,catch (Exception e)放在最上面,那它后面的语句就无意义了,因不会被执行到。
作者:
杨威
时间:
2012-5-9 11:34
编译不通过就是说明存在语法错误,你把Exception放在上面,它什么异常都能解决,这样下面两个catch等于无用,执行不到啊。就相当于多余的,编译自然失败了……
作者:
HeiMaYSL
时间:
2012-5-9 12:18
我的理解是:
既然在Demo类里声明了异常,
那么,在main方法里,捕获异常时,要么把子类异常写在上面。这样可以看清楚比较具体的异常。
如果,把父类异常放在了前面,那么,子类的异常就没有必要再写在下面了。因为,父类已经处理了,你就没有必要再让子类异常再去处理了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2