抛出catch块中的异常请求另一个try catch块

时间:2014-01-28 07:31:35

标签: java exception exception-handling

我正在尝试将Exception返回到调用一个。所以我抓住了异常并抛出它。扔它时请我在try catch块中包含声明。

catch(IOException e){
 throw new Exception(e);//ask me to surround with try catch
}

只是想知道为什么这样说。

6 个答案:

答案 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)

这是因为Exceptionchecked。您需要重新抛出RuntimeException的子类。通常使用IllegalArgumentExceptionIllegalStateException

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;

或者如果你不打算用它做任何事情,甚至不要去抓它,让它冒出来。