2013-10-31 204 views
2

即使這裏是一個示例:繼續執行程序捕獲異常

class A{ 

    method1(){ 
    int result = //do something 
    if(result > 1){ 
     method2(); 
    } else{ 
     // do something more 
    } 
    } 

    method2(){ 
    try{ 
     // do something 
    } catch(Exception e){ 
     //throw a message 
     } 

    } 
    } 

時的情況是這樣的。

當Method2內部的catch塊被調用時,我希望程序繼續執行並返回到方法1中的else塊。我該如何實現這個功能?

感謝您的任何幫助。

回答

1

我想你在找什麼是這樣的:

class A{ 

method1(){ 
int result = //do something 
if(result > 1){ 
    method2(); 
}else{ 
    method3(); 
} 
} 

method2(){ 
    try{ 
    // do something 
    } catch(Exception e){ // If left at all exceptions, any error will call Method3() 
    //throw a message 
    //Move to call method3() 
    method3(); 
    } 
} 

method3(){ 
    //What you origianlly wanted to do inside the else block 

} 
} 

} 

在這種情況下,如果程序移入方法2中的catch塊,程序將調用Method3。在Method1中,else塊也調用method3。這將模仿程序'移回'到catch塊的else塊

+0

謝謝,但是我無法弄清楚最具體的例外情況,它會在嘗試中拋出。沒有特定的例外,執行會變得更高,永遠不會調用方法3 – Ashish

+0

對不起,我不明白你的意思是「執行會更高,永遠不會調用method3」。在上面的情況中,如果有一個例外被調用並且它移動到Catch Block中,則方法3將自動被調用。你不必有特定的異常,對不起,這是我的錯誤,但是如果你有什麼情況你不想調用Method3(),當有異常時,你將需要另一個Catch Block – XQEWR

+0

最後一個問題:我們認爲這是一個很好的做法嗎? – Ashish

4

簡單地將method2的調用封裝在try-catch塊中。捕獲異常不會導致未處理的異常被拋出。做這樣的事:

if(result > 1){ 
    try { 
     method2(); 
    } catch(Exception e) { //better add specific exception thrwon from method2 
     // handling the exception gracefully 
    } 
    } else{ 
     // do something more 
} 
+0

感謝您的迴應。但它將如何最終執行else塊中的代碼。你的邏輯是完美的我只是很難理解它會如何最終在其他塊 – Ashish

+0

@Ashish我給出的代碼將只是優雅地處理異常。它不會執行else塊中的代碼。如果和其他塊互斥,即一次只能執行一個塊。如果你有一些代碼在if block和normal else block執行時都要執行,那麼在方法中移動else塊的代碼。並從if塊中的catch塊和normal塊中調用該方法。 –

+0

很好的答案,謝謝 – Ashish

0

你需要一個雙if來代替。

method1() 
{ 
    if(result > 1) 
    { 
     if(method2()) { execute code } 
     else { what you wanted to do in the other code } 
    } 
} 

和OFC讓方法2回報的東西(在這種情況下,我讓它以方便查看返回布爾)