Java 异常 重写方法时抛出异常

Posted 王景迁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 异常 重写方法时抛出异常相关的知识,希望对你有一定的参考价值。

  注意:

  子类重写父类方法时要抛出与父类一致的异常,或者不抛出异常。

  子类重写父类方法所抛出的异常不能超出父类的范畴。

  重写方法不能抛出新的受检异常或者比被重写方法更加宽泛的受检异常,可以抛出非受检异常(父类只抛出受检异常情况下)。例如:父类的一个方法抛出了一个受检异常IOException,重写该方法时不能抛出Exception,只能抛出IOException的子类异常,也可以抛出非受检异常。Error和RuntimeException及其子类属于非受检异常(unchecked),其它异常属于受检异常(checked)。

 

 1 class A {  
 2     public void fun() throws Exception {  
 3           
 4     }  
 5 }  
 6 class B extends A {  
 7     public void fun() throws IOException, RuntimeException {  
 8           
 9     }  
10 }  

  父类抛出的异常包含所有异常,上面的写法正确。

 1 class A {  
 2     public void fun() throws RuntimeException {  
 3           
 4     }  
 5 }  
 6 class B extends A {  
 7     public void fun() throws IOException, RuntimeException {  
 8           
 9     }  
10 }  

  子类IOException超出了父类的异常范畴,上面的写法错误。

 1 class A {  
 2     public void fun() throws IOException {  
 3           
 4     }  
 5 }  
 6 class B extends A {  
 7     public void fun() throws IOException, RuntimeException, ArithmeticException {  
 8           
 9     }  
10 }  

  RuntimeException不属于IO的范畴,超出了父类的异常范畴。RuntimeException和ArithmeticException属于运行时异常,子类重写的方法可以抛出任何运行时异常。所以上面的写法正确。

 

  参考资料

  在继承中重写方法时抛出异常的问题

以上是关于Java 异常 重写方法时抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

Java 覆盖

java写的excel导出时抛出的异常

异常库

Java中子类重写父类的方法为啥返回值类型要小于等于父类方法的返回值类型?

Java 异常 受检异常与非受检异常

使用 POST 方法上传 JSON 对象时抛出错误请求异常