首页 文章

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

提问于
浏览
0

我试图抛出异常回到调用一个 . 所以我 grab 了异常并抛出它 . 扔它时请我在try catch块中包含声明 .

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

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

6 回答

  • 4

    是的,你要抓 IOException 而你想抛出一个 Exception . 您必须将 throws Exception 添加到方法 .

    public void myMethod() throws Exception{
     try{
       // implementaion
    
     }catch(IOException e){
       throw new Exception(e);
     }
    }
    
  • 0

    您正在捕获IOException并抛出Exception . 您需要从方法抛出异常 .

  • 1

    您的方法签名可能尚未定义为抛出异常 . 将 throws Exception 添加到您的方法,它应该工作 .

    要不然

    你必须只抛出一个 Exception 的子类,但不能抛出不可接受的父 Exception . 因此你需要 grab 它或明确抛出 .

  • 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; .

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

  • 0

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

    public void myMethod(){
     try{
       // implementaion
    
     }catch(IOException e){
       LOG.error(e);
       throw new IllegalArgumentException("Bad file: ", e);
     }
    }
    

相关问题