我试图抛出异常回到调用一个 . 所以我 grab 了异常并抛出它 . 扔它时请我在try catch块中包含声明 .
catch(IOException e){ throw new Exception(e);//ask me to surround with try catch }
只是想知道为什么这样说 .
是的,你要抓 IOException 而你想抛出一个 Exception . 您必须将 throws Exception 添加到方法 .
IOException
Exception
throws Exception
public void myMethod() throws Exception{ try{ // implementaion }catch(IOException e){ throw new Exception(e); } }
您正在捕获IOException并抛出Exception . 您需要从方法抛出异常 .
您的方法签名可能尚未定义为抛出异常 . 将 throws Exception 添加到您的方法,它应该工作 .
要不然
你必须只抛出一个 Exception 的子类,但不能抛出不可接受的父 Exception . 因此你需要 grab 它或明确抛出 .
您需要声明您的方法抛出所需的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 }
正如其他人指出的那样,您的方法签名需要说明它将抛出的异常类型 .
但更重要的是,如果您没有创建新的特定类型的异常,则不需要新的另一个异常 . 只要重新抛出你抓到的那个 throw e; .
throw e;
或者如果你不打算用它做任何事情,甚至不要去抓它,让它冒出来 .
这是因为 Exception 是checked . 您需要重新抛出 RuntimeException 的子类 . 通常使用 IllegalArgumentException 或 IllegalStateException
RuntimeException
IllegalArgumentException
IllegalStateException
public void myMethod(){ try{ // implementaion }catch(IOException e){ LOG.error(e); throw new IllegalArgumentException("Bad file: ", e); } }
6 回答
是的,你要抓
IOException
而你想抛出一个Exception
. 您必须将throws Exception
添加到方法 .您正在捕获IOException并抛出Exception . 您需要从方法抛出异常 .
您的方法签名可能尚未定义为抛出异常 . 将
throws Exception
添加到您的方法,它应该工作 .要不然
你必须只抛出一个
Exception
的子类,但不能抛出不可接受的父Exception
. 因此你需要 grab 它或明确抛出 .您需要声明您的方法抛出所需的exeption类型 . 请注意,抛出
Exception
类的普通实例是一个非常糟糕的主意 .当您抛出
Exception
的实例(一个不是任何子类的实例)时,您无法真正进行专门的异常处理 . 方法签名中的throws Exception
语句很可能会像疾病一样在级别层次结构中级联 . 考虑抛出一个更具体的(可能是自定义的)Exception
实例 .在某些情况下,可能不会处理最初抛出它的标准Java类抛出的异常,而是使用以下代码将其抛回调用者:
正如其他人指出的那样,您的方法签名需要说明它将抛出的异常类型 .
但更重要的是,如果您没有创建新的特定类型的异常,则不需要新的另一个异常 . 只要重新抛出你抓到的那个
throw e;
.或者如果你不打算用它做任何事情,甚至不要去抓它,让它冒出来 .
这是因为
Exception
是checked . 您需要重新抛出RuntimeException
的子类 . 通常使用IllegalArgumentException
或IllegalStateException