我知道如何尝试,捕获&最后工作(大多数情况下),但我有一件事我想知道:在try-catch-finally之后返回语句会发生什么,而我们已经在try(或catch)中返回了一个?
例如:
public boolean someMethod(){
boolean finished = false;
try{
// do something
return true;
}
catch(someException e){
// do something
}
finally{
// do something
}
return finished;
}
让我们说尝试中没有出错,所以我们回复了。然后我们将去最后我们做的事情,比如关闭连接,然后呢?
在我们在finally中执行了一些操作之后,方法是否会停止(因此方法在try中返回true),或者方法将在finally之后继续,导致返回 finished (这是假)?
提前感谢您的回复。
答案 0 :(得分:16)
执行finally块的事实并不会使程序忘记您返回。如果一切顺利,finally块之后的代码将无法执行。
这是一个明确的例子:
public class Main {
public static void main(String[] args) {
System.out.println("Normal: " + testNormal());
System.out.println("Exception: " + testException());
}
public static int testNormal() {
try {
// no exception
return 0;
} catch (Exception e) {
System.out.println("[normal] Exception caught");
} finally {
System.out.println("[normal] Finally");
}
System.out.println("[normal] Rest of code");
return -1;
}
public static int testException() {
try {
throw new Exception();
} catch (Exception e) {
System.out.println("[except] Exception caught");
} finally {
System.out.println("[except] Finally");
}
System.out.println("[except] Rest of code");
return -1;
}
}
输出:
[normal] Finally
Normal: 0
[except] Exception caught
[except] Finally
[except] Rest of code
Exception: -1
答案 1 :(得分:7)
如果一切顺利,在执行try
区块后执行finally
内部的返回。
如果在try
内出现问题,则会捕获并执行exception
,然后执行finally
阻止,然后执行返回。
答案 2 :(得分:3)
在这种情况下,finally中的代码会运行,但是当没有异常时会跳过另一个返回。 你也可以通过记录东西来看到这个:)
另见System.exit
:
How does Java's System.exit() work with try/catch/finally blocks?
答案 3 :(得分:2)
public int Demo1()
{
try{
System.out.println("TRY");
throw new Exception();
}catch(Exception e){
System.out.println("CATCH");
}finally{
System.out.println("FINALLY");
}return 0;
}
调用此方法的输出就像这样
TRY
CATCH
FINALLY
0
意味着将Try{}catch{}finally{}
视为逐个执行的语句序列在这种特殊情况下。
而不是控制权返回。
答案 4 :(得分:0)
当然try中的代码将执行..但是当它到达return语句时...它将移动到finally块而不执行try块中的return语句..然后将执行finally的代码然后执行return语句将执行。