在java中,如果try和catch都抛出相同的异常并最终返回,会怎么样?
为什么返回值是4?这就是在java中,如果try和catch都抛出相同的异常并最终返回,会怎么样?,java,exception-handling,Java,Exception Handling,为什么返回值是4?这就是最终的工作方式。片段 public class Abc { public static void main(String args[]) { System.out.println(Abc.method()); } static int method() { try { throw new Exception(); } catch(Exception e) {
最终的工作方式。片段
public class Abc {
public static void main(String args[]) {
System.out.println(Abc.method());
}
static int method() {
try {
throw new Exception();
}
catch(Exception e) {
throw new Exception();
}
finally {
return 4;
}
}
}
将突然完成,但finally子句将生效,当它返回时,将放弃完成语句的原始原因
Java语言规范的第节对此进行了解释。我已经强调了与您的情况相关的路径:
一个try
语句
最后执行
块
首先执行
try
block。还有
选择:
如果
执行try
块正常完成,然后
最后
块是
执行,然后有一个选择:
如果执行
在try
块的
由于一个错误而突然完成
抛出一个值
五、 还有一个选择:
如果
V的运行时类型为
可分配给任何
catch
条款
尝试
语句,然后
第一个(最左边的)这样的
catch
子句被选中。
将值V指定给
所选对象的参数
catch
子句,以及
一块
执行catch
子句。
还有一个选择:
- 如果
catch
块完成
通常情况下
最后
块是
执行。还有一个选择:
- 如果
catch
块完成
突然因为R的原因,然后
最后
块是
执行。还有一个选择:
- 如果
最后
块完成
正常情况下,然后尝试
语句突然完成
原因R。
- 如果
最后
块因某种原因突然完成
S、 然后按下键,尝试
语句突然完成
原因S(和原因R)
被丢弃)。
- 如果运行时类型为V
不可分配给的参数
合同的任何
catch
条款
尝试
语句,然后
最后
块是
执行。还有一个选择:
- …
如果执行
try
块完成
出于任何其他原因突然
R、 然后
最后
块是
执行。还有一个选择:
- 。。。
你不应该从最后一个街区回来。这是非常糟糕的做法。请参见和。关于StakOverflow,有几个问题可以解释这一点
简单一点:如果在finally子句中放入return或throw语句,这是方法的最后一个操作。但总的来说,这是一种不好的做法 finally块返回值的事实导致抛出的异常被吞没,因此它不会传播到方法之外。finally将始终返回4。无论try和catch块中抛出任何异常,finally块都将始终执行。try块用于执行某些任务,如果任务无法完成,v则从catch块中抛出异常。您不应该在try中抛出异常。+1,比我想知道的更多的细节。如果在try
中有一个return
,会发生什么?finally仍然会启动并放弃前面完成语句的原因。在您的示例中没有finally
。
try {
throw new Exception();
} catch(Exception e) {
throw new Exception();
}