2013-10-21 71 views
0

我有一個Java類,它執行JNDI查找並返回查找ejb對象。如果查找失敗,則會處理各種異常,如果發生故障,它將返回空值。異常處理與空返回

現在,當該API被調用並且查找失敗時,我們將得到空指針異常。我們可以在調用類中進行空檢查,但我需要確切的失敗原因。如何捕獲基類中拋出的異常?

+0

爲什麼要捕捉查找異常,如果你想在其他地方處理它? – fluminis

回答

1

不要捕獲異常,或者如果您需要捕獲它們以執行某些特定工作,請在完成後重新拋出異常,以便調用者可以看到異常並自行處理它。

像:

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? 
    } 
} 
+0

但是,在捕捉到這些異常之後,還需要執行一些更多的語句。如果我嘗試添加throw語句,我會爲其餘的代碼行獲得「無法訪問的代碼錯誤」! – user2902067

+0

的Class1: - 公共homeobj M1(){ 嘗試{ \t \t = homeobj JNDI查找(); return homeobj; } 趕上(例外TYPE1 E1){ } 趕上(例外TYPE2 E2){ } //一些更statemnts執行 返回NULL; } 等級2: - 方法平方米(){ Class1.m1()的someMethod(); //這裏我們將得到空指針異常 } } 這是代碼結構。如果我空在這裏處理,我將失去異常,如果我在Class1的重新拋出異常,重新拋出後剩餘的代碼將無法訪問 – user2902067

1

如果你想在調用鏈向上傳遞錯誤的信息,要做到這一點的最好辦法是一個例外。

而不是返回null失敗的查找,你應該讓查找異常傳播或包裝在自定義異常,如果你想添加額外的信息。

+0

1類: - 公共homeobj M1(){ 嘗試{ \t \t homeobj = JNDI查找() ; return homeobj; } 趕上(例外TYPE1 E1){ } 趕上(例外TYPE2 E2){ } //一些更statemnts執行 返回NULL; } 等級2: - 方法平方米(){ Class1.m1()。的someMethod(); //這裏我們將獲得空指針異常 } } 這是代碼結構。如果我在這裏處理Null,我將丟失異常,並且如果我在Class1中重新拋出異常,重新拋出後的剩餘代碼將無法訪問 – user2902067

+0

如果即使查找失敗,您仍想執行該操作,請在查找之前或在異常處理程序,然後重新拋出異常。 –

+1

@ user2902067'finally'塊怎麼樣? –