在听张孝祥的课时遇到的问题,在异常一讲里,有这末一句话:
如果父类扔出多个异常,那末重写(覆盖)方法必须扔出那些异常的一个子集,也就是说不能扔出新的异常。
我个人对于这句话不太了解,我试了一下代码,
比如:
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:我明白应该抛出这些异常或他们的子类,不能抛出他们的父类,这个明白,可是他指的是抛出父类异常的数量以下还是这些异常数量的子类

解决方案 »

  1.   

    NullPointerException 是 RumtimeException  不在此限制范围内
    编译器检查的是所有已检查异常是否有try catch 或者 throw出来
      

  2.   

    java.lang.Object
      java.lang.Throwable
          java.lang.Exception
              java.lang.RuntimeException
                  java.lang.NullPointerException
      

  3.   

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