首先讓asume,doSomething1()和exceltion_handle1(),不叫System.exit(x)什麼的。 1)所以第一段代碼,將doSomething1(),不管doSomething1()是否會拋出任何Exception,它將處理它(處理catch代碼塊),並提前第二次嘗試並運行它辦法。
try {
doSomething1();
} catch(Exception e1){
exception_handle1();
}
try {
doSomething2();
} catch(Exception e2){
exception_handle2();
}
今天早上,所以我希望我不會做出任何錯誤的決定。這個代碼將運行doSomething1()然後doSomething2(),並且不管哪一個會失敗(拋出Exception),只有第一個catch子句會被調用,因爲它吸收了所有的子類和它自己,所以第二個catch將無法達到(首先考慮所有可能的例外情況)。 所以afaik,你應該得到一個錯誤(不應該編譯)。這是聰明的,會承認,第二次捕獲將不會以任何方式達成。
正確的模式是:當我們進入底部時,例外應該更寬和更寬(嚴格)。這是合乎邏輯的,因爲捕捉子句的次序減少,上部捕捉不應該是底部父項,因爲ANYWAY父項將採用該異常,並且底部的子項將不會被觸及。
Example: (I recommend you to learn about Multicatch in java.)
catch (Specific2ChildOfSpecific1 e3)
...
catch (specific1ChildOfException e2)
...
catch (Exception e1)
try {
doSomething1();
doSomething2();
} catch(Exception e1) {
exception_handle1();
} catch(Exception e2) {
exception_handle2();
}
3)這一個:如果doSomething1()將失敗E1 catch子句就會執行,多數民衆贊成,是否會通過,那麼如果了doSomething2()將運行,如果失敗,那麼E2 catch子句會被執行。
注意@第二個例子,無論哪個doSomething將會失敗,e1都會被執行(不要忘記有一個錯誤,因爲第二個是不可訪問的)。但我明白你想問什麼。
try {
doSomething1();
try {
doSomething2();
} catch(Exception e2){
exception_handle2();
}
} catch(Exception e1){
exception_handle1();
}
來源
2012-12-03 09:03:51
EEE
嘗試,你會看到 – njzk2
非常驚人的是,它們都是語法錯誤。 – melpomene
如果你在尋找一般的例外,第一個和第二個非常相似。除非你使異常更具體(例如IOException,MathException等),否則它們幾乎是相同的。 – hesson