我正在尝试将Exception返回到调用一个。所以我抓住了异常并抛出它。扔它时请我在try catch块中包含声明。
catch(IOException e){
throw new Exception(e);//ask me to surround with try catch
}
只是想知道为什么这样说。
答案 0 :(得分:4)
是的,当您想要IOException
时,您正在捕捉Exception
。您必须将throws Exception
添加到方法。
public void myMethod() throws Exception{
try{
// implementaion
}catch(IOException e){
throw new Exception(e);
}
}
答案 1 :(得分:1)
您正在捕获IOException并抛出异常。您需要从方法中抛出异常。
答案 2 :(得分:0)
您的方法签名可能尚未定义为抛出异常。将<{1}}添加到您的方法中,它应该正常工作。
否则
你必须只抛出一个throws Exception
但不是父Exception
的子类,这是不可接受的。因此你需要抓住它或明确地扔掉它。
答案 3 :(得分:0)
这是因为Exception
是checked。您需要重新抛出RuntimeException
的子类。通常使用IllegalArgumentException
或IllegalStateException
public void myMethod(){
try{
// implementaion
}catch(IOException e){
LOG.error(e);
throw new IllegalArgumentException("Bad file: ", e);
}
}
答案 4 :(得分: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
}
答案 5 :(得分:0)
正如其他人指出的那样,您的方法签名需要说明它将抛出的异常类型。
但更重要的是,如果您没有创建新的特定类型的异常,则不需要再创建另一个异常。只需重新抛出你抓到的那个throw e;
。
或者如果你不打算用它做任何事情,甚至不要去抓它,让它冒出来。