一個常見的錯誤是不打印出堆棧跟蹤,或根本不打印出異常。不要在大多數情況下這樣做,因爲你扔掉了有用的信息。
我會使用調試器來遍歷代碼或找到引發異常的確切點,或者您可以讀取異常的堆棧跟蹤。
public static void f() throws Exception {
statement1(); //can throw exception line 101
statement2(); //can throw exception line 102
statement3(); //can throw exception line 103
}
當堆棧跟蹤顯示它在第101,102或103行上拋出異常時,它會告訴您它正在執行哪條語句。
如果您需要在運行時執行此操作,則每次將其中的每一個都放入try/catch塊時執行一些不同的操作。
public static void f() throws Exception {
try {
statement1();
} catch (TheException e) {
doSomething1();
// return or throw
}
try {
statement2();
} catch (TheException e) {
doSomething2();
// return or throw
}
try {
statement3();
} catch (TheException e) {
doSomething3();
// return or throw
}
}
你拋出這些異常或API,你正在使用? – Andrew
我拋出一些上層的異常,在那個層次上,如果代碼在某個時刻運行,我需要找出一種方法,以便我可以採取特定的操作。 –
你有沒有'f'的手?你可以改變它嗎?如果是這樣,每個語句周圍的一些「嘗試捕獲」可以幫助您打包自定義拋出的異常,並稍後處理自定義拋出的異常。某些方面可能是另一種解決方案 –