我的catch塊中的return A
代碼會發生什麼?爲什麼在最後嘗試抓住,最後的回報總是那樣?
public class TryCatchFinallyTest {
@Test
public void test_FinallyInvocation()
{
String returnString = this.returnString();
assertEquals("B", returnString);
}
String returnString()
{
try
{
throw new RuntimeException("");
}
catch (RuntimeException bogus)
{
System.out.println("A");
return "A";
}
finally
{
System.out.println("B");
return "B";
}
}
}
很多的答案已經在這裏。以下是我可以找到的JLS中最相關的部分:http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20.2。這說明,如果catch塊成功完成,那麼將執行finally塊。在自己運行一個示例並閱讀該部分之後,這導致我相信在這種情況下catch塊的return語句被丟棄。 –
當然,您可能會詢問JVM實現的具體細節,而不是JVM應該展現的行爲。你能澄清你在找什麼嗎? –