2014-02-14 41 views
0

我需要跟蹤以下代碼。怎麼了? 我能走到今天......異常處理Try-catch:如果var 1,2和3爲假,會發生什麼

讓我們開始(現在的嘗試f) ˚F開始下一扔EXC1因爲VAR1 =假 現在我終於回到主,試圖轉到方法d?

void main() { 
    println("Let's start"); 
    try { 
     f(); 
     d(); 
    } catch (Ex1 ex) { 
     println("main caught Ex1"); 
    } catch (Ex3 ex) { 
     println("main caught Ex3"); 
    } finally { 
     println("main finally"); 
    } 
    println("main end"); 
} 

void f() { 
    println("F begins"); 
    try { 
     if (var1) { 
      d(); 
     } else { 
      throw new Ex1(); 
     } 
    } catch (Ex2 ex) { 
     println("f caught Ex2"); 
    } 
    println("a end"); 
} 

void d() { 
    println("d begin"); 
    try { 
     if (var2) throw new Ex2(); 
     if (var3) throw new Ex3(); 
    } catch (Ex3 ex) { 
     println("d caught ex3"); 
    } finally { 
     println("d finally"); 
    } 
    println("d end"); 
} 
+0

你沒有b()你有d() – Mozzie

+0

是的,它調用d()。我對「流程」感到困惑 – StreamingBits

+0

到目前爲止,我看到程序打印「讓我們開始」,去f(),「F開始」,嘗試語句var1 = false,然後繼續執行其他操作,拋出Exc1(),返回以d,「d開始」,打印「d finally」,主要,主要捕獲ex1,「主要捕獲Exc1」,「主要最終」,「主要目的」爲主。它是否正確? – StreamingBits

回答

1

在此代碼:

try { 
    f(); 
    d(); 
} catch (Ex1 ex) { 
    println("main caught Ex1"); 
} catch (Ex3 ex) { 
    println("main caught Ex3"); 
} finally { 
    println("main finally"); 
} 

如果f()拋出一個異常,try塊將退出。無論是否發生異常,main()不是請致電d()。如果有一個捕獲異常的catch塊,它將被執行,然後執行finally塊;否則,將執行finally塊,然後再次拋出異常。但在這兩種情況下,d()都不會被調用。

+0

謝謝!那麼主要方法的try語句會自動捕獲Ex1,然後打印並結束程序? – StreamingBits

+0

@StreamingBits這就是我看到的情況,f()拋出Ex1,它不會被f()中的try所捕獲,因此它傳播到主要方法try,它捕獲它捕獲(Ex1 ex),打印到屏幕,最後運行,然後程序退出。 –

+0

@Mark W謝謝。我對此很陌生,我想確保我不會錯過某些愚蠢的東西。只是一個概念問題。 – StreamingBits

相關問題