Java 最后尝试捕捉,然后返回
我知道try、catch和finally是如何工作的(大部分情况下),但我想知道一件事:try-catch-finally之后的return语句会发生什么,而try(或catch)中已经有了return 例如:Java 最后尝试捕捉,然后返回,java,return,try-catch,try-catch-finally,finally,Java,Return,Try Catch,Try Catch Finally,Finally,我知道try、catch和finally是如何工作的(大部分情况下),但我想知道一件事:try-catch-finally之后的return语句会发生什么,而try(或catch)中已经有了return 例如: public boolean someMethod(){ boolean finished = false; try{ // do something return true; } catch(someException e
public boolean someMethod(){
boolean finished = false;
try{
// do something
return true;
}
catch(someException e){
// do something
}
finally{
// do something
}
return finished;
}
让我们假设在尝试中没有出错,所以我们返回true。然后我们将进入最后一步,在那里我们做一些事情,比如关闭一个连接,然后呢
我们在finally中做了一些事情之后,该方法会停止(因此,该方法在try中返回true),还是该方法会在finally之后继续,导致返回finished(这是false)
提前感谢您的回复。在这种情况下,将运行finally中的代码,但如果没有异常,将跳过另一个返回。 您也可以通过记录以下内容自己看到这一点:) 另请参见有关
系统的内容。退出:
最后,请看《从一个地方回来》一文:
如果一切顺利,在执行finally
块后执行try
时返回
如果try
内部出现问题,则捕获并执行异常,然后执行最后执行块,然后执行该块之后的返回。try内部的代码肯定会执行。。但当它到达返回语句时。。它将移动到finally块,而不执行try块中的return语句。。然后执行finally的代码,然后执行try的return语句
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
意味着考虑<代码>尝试{}} catch {}最后{}} /Case>作为在这个特定情况下逐个执行的语句序列。
然后控制返回。执行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
为什么你不能直接执行代码,看看它返回什么值呢?因为他在一条总线上,只是想知道^^“那个案例”的意思是“没有例外”,而“另一个返回”是在finally块之后的,对吗?(为了说明这一点)@Fildor如果出现异常,将使用第二次返回,但仍然执行finally块。正如我所说的,你可以在main中的一个小程序中自己尝试这样做,看看system.out、logging或断点会发生什么,我知道这一点。我刚刚发现你使用的措辞有点模棱两可…@Fildor是的,我只是毫无例外地讲述了这个案例,因为我认为这是最有趣的。这是Java 7之前关闭资源的默认方法(使用finally)。如果我没记错的话,建议不要在try中返回,但是您应该设置finished
,并让它只返回一个位置。@JqueryLearner什么让您认为它不可访问?@JqueryLearner finally块不是结束。试试看。之后的所有代码都将是完全可访问的。最终什么也没有返回。它只是一个代码块,执行时不知道是否存在异常。@JqueryLearner,但原因不同。将返回放到finally中,并在tryblock中放置一些实际上可能引发异常的内容。它将编译并运行。@JqueryLearner,因为您在finally块中放置了一个返回。这使得后面的所有内容都无法访问。@Fildor这是我的错,我认为OP在finally块中也有返回语句。所以所有这些讨论都没有用。Sorry@Narendra11744如果你不知道结果,请尝试一些代码,但请不要给出错误的答案。如果没有发生异常,在finally块之后,将执行try中的return语句,而不执行其他语句。