2014-01-28 79 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;

或者如果你不打算对它做任何事情,不要打扰它,让它冒泡。