2016-04-23 225 views
0

如果我必須處理和測試異常以調用處理異常的另一個類的類,那麼我會產生混淆。Java異常處理概念

這裏是我的課基本解釋:

A類 - >有一個方法,並調用拋出異常的方法。唯一的例外是使用try和catch

B級處理 - >要求從A類的方法它現在不拋出任何異常,因爲異常在A級處理

我想知道如果我必須添加拋出並顯示異常拋出B類?另外,我是否必須單元測試,在類B中調用的方法拋出異常?當我試圖這樣做時,測試用例失敗了。

這裏是A類處理異常:

public String getFooData(Foo foo, String foo1, String foo2) { 
    String foodata = ""; 
    try { 
     FooRequest request = foo.setFoo1(foo1).setFoo2(foo2).buildQueryMessage(); 
     foodata = request.getFooData(); 
    } catch (SystemException e) { 
     errorReporter.report(".SystemException", e); 
    } 
} 

這裏是我的B級:

public String getFoo(String foo2) { 
    RequestBuilder requestBuilder = Request.Provider(ProviderType.foo); 
    String foodata = instanceOfA.getFooData(foo, foo1, foo2); 
    return foodata; 
} 

回答

1

我想知道如果我要補充拋出,並顯示異常被拋出B級?

如果你指的是以下幾點:

public String getfoo(String foo2) throws SystemException { ... } 

那麼答案是否定的。您不必聲明該方法會拋出一個SystemException,因爲它不會。它在Class A中拋出/處理,並且不會傳播到Class B。但是,您是否在Class A中未處理例外情況,如果它是Checked Exception,則必須在方法簽名Class A中指定您的例外情況。然後你可以選擇在Class B中處理它或者進一步傳播它。還需要指定Class B引發一個檢查的異常,或者將其包裝在Runtime Exception中,並在未將其聲明在方法簽名中的情況下進行拋出。

public String getfoodata(Foo foo, String foo1, String foo2) throws SystemException { ... } 

而且,我有單元測試,呼籲在B類的方法拋出異常?

Class B不會拋出異常。它被扔在Class A並在那裏處理。

+0

真棒....非常感謝你澄清... – Jasmine

+0

@Jasmine沒問題!如果它完全回答你的問題,不要忘記「標記爲已解決」(綠色檢查向下/向下投票)。 – Jaims