我有一個Java類,它執行JNDI查找並返回查找ejb對象。如果查找失敗,則會處理各種異常,如果發生故障,它將返回空值。異常處理與空返回
現在,當該API被調用並且查找失敗時,我們將得到空指針異常。我們可以在調用類中進行空檢查,但我需要確切的失敗原因。如何捕獲基類中拋出的異常?
我有一個Java類,它執行JNDI查找並返回查找ejb對象。如果查找失敗,則會處理各種異常,如果發生故障,它將返回空值。異常處理與空返回
現在,當該API被調用並且查找失敗時,我們將得到空指針異常。我們可以在調用類中進行空檢查,但我需要確切的失敗原因。如何捕獲基類中拋出的異常?
不要捕獲異常,或者如果您需要捕獲它們以執行某些特定工作,請在完成後重新拋出異常,以便調用者可以看到異常並自行處理它。
像:
method1() {
try {
// SomeException is thrown here
} catch (SomeException e) {
// do some work because of the exception
throw e // re-throw or throw new MyException(e)
}
}
method2() {
try {
method1();
} catch (SomeException e) {
// something went bad!
// do some specific work?
}
}
但是,在捕捉到這些異常之後,還需要執行一些更多的語句。如果我嘗試添加throw語句,我會爲其餘的代碼行獲得「無法訪問的代碼錯誤」! – user2902067
的Class1: - 公共homeobj M1(){ 嘗試{ \t \t = homeobj JNDI查找(); return homeobj; } 趕上(例外TYPE1 E1){ } 趕上(例外TYPE2 E2){ } //一些更statemnts執行 返回NULL; } 等級2: - 方法平方米(){ Class1.m1()的someMethod(); //這裏我們將得到空指針異常 } } 這是代碼結構。如果我空在這裏處理,我將失去異常,如果我在Class1的重新拋出異常,重新拋出後剩餘的代碼將無法訪問 – user2902067
如果你想在調用鏈向上傳遞錯誤的信息,要做到這一點的最好辦法是一個例外。
而不是返回null
失敗的查找,你應該讓查找異常傳播或包裝在自定義異常,如果你想添加額外的信息。
1類: - 公共homeobj M1(){ 嘗試{ \t \t homeobj = JNDI查找() ; return homeobj; } 趕上(例外TYPE1 E1){ } 趕上(例外TYPE2 E2){ } //一些更statemnts執行 返回NULL; } 等級2: - 方法平方米(){ Class1.m1()。的someMethod(); //這裏我們將獲得空指針異常 } } 這是代碼結構。如果我在這裏處理Null,我將丟失異常,並且如果我在Class1中重新拋出異常,重新拋出後的剩餘代碼將無法訪問 – user2902067
如果即使查找失敗,您仍想執行該操作,請在查找之前或在異常處理程序,然後重新拋出異常。 –
@ user2902067'finally'塊怎麼樣? –
爲什麼要捕捉查找異常,如果你想在其他地方處理它? – fluminis