关于java异常抛出与返回值

Posted

tags:

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

我想问cal函数明明有返回值,我在函数体里面却没有return语句,为什么不报错?难道抛出异常是个特殊情况?

参考技术A throw new RuntimeException();
已经抛出异常了。所以不会报错了
参考技术B 异常处理的流程:
① 遇到错误,方法立即结束,并不返回一个值;同时,抛出一个异常对象 。
② 调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常处理器,并执行其中的代码 。
如果你是这样抛出异常:
public int cal(int n) throws RuntimeException

肯定是报错的,提示没有返回值。
而你上面的写法,new 了一个RuntimeException程序不会执行下去了,而是处理该异常了,所以没有返回值是可以的。希望能帮到你!本回答被提问者和网友采纳

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 异常处理

一文读懂 JAVA 异常处理

java问题 ~~求教高手 13) 以下关于异常的说法,错误的是

Java异常(Exception)

关于java.lang.IllegalMonitorStateException异常说明