2014-01-18 43 views
0

我有一個簡單的疑問。在下面的兩個代碼,在第一return語句被置於finally
在final方法中放置return語句

public int method1(){ 
    try{ 
     // Some Stuff 
    } catch(Exception e){ 
     e.printStackTrace(); 
    } finally{ 
     return 0; 
    } 
} 

而在第二return語句內被作爲正常

public int method1(){ 
    try{ 
     // Some Stuff 
    } catch(Exception e){ 
     e.printStackTrace(); 
    } finally{ 

    } 
    return 0; 
} 

是否有這兩者之間的任何差異?哪個可以用作更好的選擇?爲什麼?

+0

你不應該在finally塊裏面有return語句。這可以覆蓋try塊中完成的事情,並可能導致真正複雜的邏輯。 –

+0

在finally塊中返回的任何內容實際上都會覆蓋try/catch塊內的任何異常或返回值。 –

回答

6

在finally塊中有「返回」不是一個好習慣。該finally塊可由於兩方面的原因被執行:

(一)一個例外是由try塊拋出(而不是由catch塊捕獲) - 在這種情況下,方法沒有任何返回值,以便一個return something聲明finally塊將不起作用。

(b)try塊正常完成。如果該塊以return something結尾,那麼您的代碼對讀者來說有點混亂,因爲現在有兩個相關的返回語句,並且不清楚哪個應該優先於另一個。

+0

這是**總是**不好的做法。 – MariuszS

+1

正確。固定。 –

+0

*(a)...在這種情況下,該方法將沒有返回值* - 我希望你的意思是一個異常,沒有抓住'catch'分支。 – kajacx