2014-01-28 176 views

回答

4

是的,你正在捕捉IOException而你想拋出一個Exception。你必須添加throws Exception方法。

public void myMethod() throws Exception{ 
try{ 
    // implementaion 

}catch(IOException e){ 
    throw new Exception(e); 
} 
} 
+1

本例中捕捉異常的用法是什麼? IOException是Exception的一個子類。爲什麼不去除catch塊? – Mikhail

+0

@Mikhail有時您可能希望向封閉實例添加自定義異常消息。 – Kallja

0

您的方法簽名可能沒有定義爲拋出異常。將throws Exception添加到您的方法,它應該工作。

否則

您只能扔的Exception一個子類,但沒有父母Exception這是不能接受的。因此你需要捕捉它或明確地拋出。

1

您正在捕獲IOException並拋出Exception.You需要從方法拋出Exception。

+0

OP可能不會對catch任何* exception異常感興趣,它會擴展Exception。 – Maroun

+0

@ᴍarounᴍaroun是和thnks.I已更新它。 – Kick

0

這是因爲Exceptionchecked。你需要重新拋出RuntimeException的子類。通常IllegalArgumentExceptionIllegalStateException使用

public void myMethod(){ 
try{ 
    // implementaion 

}catch(IOException e){ 
    LOG.error(e); 
    throw new IllegalArgumentException("Bad file: ", e); 
} 
} 
0

您需要聲明由您的方法拋出的期望exeption類型。請注意,拋出一個簡單的Exception類實例是一個非常糟糕的主意。

public void myMethod() throws Exception { 
    try { 
    // Do something that may cause an IOException 
    } catch(IOException e){ 
    throw new Exception(e); 
    } 
} 

當你扔的Exception(一個不屬於任何子類的實例)的實例,你真的不能做專門的異常處理。方法簽名中的throws Exception聲明很可能會像疾病一樣在您的類層次結構中級聯。考慮拋出一個更具體(可能是自定義)的實例Exception

在某些情況下,可能無法處理由它最初拋出的標準Java類引發的異常,但使用下面的代碼,而把它返回給調用者可行:

public void myMethod() throws IOException { 
    // Do something that may cause an IOException 
} 
0

由於其他人指出,你的方法簽名需要說明它會拋出什麼樣的異常類型。

但更重要的是,如果您未創建新的特定類型的異常,則不需要新的另一個異常。只要重新拋出一個你抓到的那個throw e;

或者如果你不打算對它做任何事情,不要打擾它,讓它冒泡。