2014-10-06 75 views
1

我試圖做到以下幾點:從try塊跳躍finally塊

String txt = "begin\n"; 

try{ 

    // some stuff 

    if(some condition) 
     JUMP TO FINALLY CODE 

    // some other stuff 

} finally { 

    String txt += "end\n"; 
    return txt; 

} 

是否有實現JUMP TO FINALLY CODE沒有引發異常(拋出一個例外不會看起來很乾淨的方式我意見)

+0

,基本解決方案:如果(一些條件){//所有語句}然後它自動跳到最後 – 2014-10-06 09:56:08

回答

7

是一個辦法是這樣的

String txt = "begin\n"; 

    try{ 

     // some stuff 

     if(some condition) 
      return; 

     // some other stuff 

    } finally { 

     String txt += "end\n"; 

    } 
+3

嗯,你會錯過'終於'後的部分。運行'finally'代碼塊後,該方法會停止。 – 2014-10-06 09:55:01

+0

好點的德米特里,但是如果'if'條件中的'return'跳轉到最後的代碼,那對我來說很好! – Backslash36 2014-10-06 09:56:53

+0

小技巧:這段代碼出現在'toString()'方法中。如果我想在'finally'塊中返回一些內容怎麼辦? 'if'中的回報會被丟棄嗎?在任何情況下,它不會看清楚讀者... – Backslash36 2014-10-06 10:00:39

5

的方法,只是return無需任何有方法的跳轉到finally,因爲這裏路徑finally塊執行。是否有Exception

您可以只使用一個return,如果你不想要執行的代碼行吼叫東西

try { 
     if(isThisShouldReturn()){ 
      return; // when if satisfied will return from try 
     } else { 
      // do the stuff 
     } 
    }finally { 
     System.out.println("come to finally"); 
    } 
+1

如果他不想執行代碼後,如果?? – 2014-10-06 09:55:01

+0

然後他應該將其他代碼封裝在其他分支中。 – 2014-10-06 09:56:09

+0

我有很多ifs裏面的try塊,我想保持代碼的可讀性。返回關鍵字應該做的伎倆! – Backslash36 2014-10-06 09:58:33

3

我的做法是否定的條件:

String txt = "begin\n"; 

try{   
    // some stuff 

    if(!someCondition) { 
     // some other stuff 
    } 

} finally {  
    String txt += "end\n"; 
} 

這將有您的示例的預期行爲。

+0

我已經在評論中提到過這個解決方案 – 2014-10-06 09:57:59

+0

@VikasVerma對不起,沒有看到。你在寫我的答案時寫下了你的評論。 – 2014-10-06 09:59:08

+2

@Vikas Verma答案是正確的,你爲什麼倒下了它?你可以回答,如果你想... – Alboz 2014-10-06 09:59:24

0

我想返回並通過拋出異常是唯一的兩種方式,你可以從try塊中獲得finally塊。

+2

不,不是。是否有異常終止塊執行 – 2014-10-06 10:05:30

0

您需要使用塊標籤結合中斷;是這樣的:

end_try: try { 
    ... 
    break end_try; 
    ... 
} finally { 
    ... 
} 

或:

try { 
    ... 
    end_try: { 
    break end_try; 
    } 

} finally { 
    ... 
} 
0

//遙,從try塊或異常.. //使用回叫:

try 
{ 
    if(true condition) 
    { 
    return; 
    } 
    else 
    { 
    //false condition do work.... 
    } 
} 

finally 
{ 
    //always executed. 
}