日期:2014-05-20  浏览次数:20852 次

关于异常的问题
在听张孝祥的课时遇到的问题,在异常一讲里,有这末一句话:
如果父类扔出多个异常,那末重写(覆盖)方法必须扔出那些异常的一个子集,也就是说不能扔出新的异常。
我个人对于这句话不太了解,我试了一下代码,
比如:
class   Test  
{
public   int   devide(int   x,int   y)   throws   ArithmeticException,   DevideByMinusException,   ZeroException
{
    .....
.....
.....
}  
}

class   SubTest   extends   Test
{
public   int   devide(int   x,int   y)   throws   ArithmeticException,   DevideByMinusException,   ZeroException,   NullPointerException
{
......
......
......
}
}
由于他说必须扔出那些异常的一个子集,所以只能最多throws   ArithmeticException,   DevideByMinusException,   ZeroException这三个异常或者这三个以下,那末我试了上面的代码,可是编译却没有出错,有点疑惑,请高手帮忙解答,谢谢

PS:我明白应该抛出这些异常或他们的子类,不能抛出他们的父类,这个明白,可是他指的是抛出父类异常的数量以下还是这些异常数量的子类

------解决方案--------------------
我给你点参考INSIKU说的很有道理,JAVA异常分为检查异常和非检查异常,非检查异常是可以不需要你捕获的,由JVM帮你捕获,而检查的异常必须要声明或捕获,如果父类被复写的方法没有抛出异常,那么子类的复写的方法必须不能抛出检查的异常,但是可以任意抛出非检查的异常,你这里NullPointerException是非检查异常,所以编译通过,如果你子类复写方法抛出了检查异常(如你自己的一个异常MyException)那么编译不通过,希望对你有帮助