bot*_*bot -1 java exception throws
确切的错误是:“抛出列表中已经有一个更一般的异常,'java.lang.exception'”
我有一个这样的方法:
public String myMethod() throws FileNotFoundException, IOException, Exception {
try{
// DO STUFF
}catch(FileNotFoundException e){
// DO STUFF
throw new FileNotFoundException("custom message", e);
}catch(IOException e){
// DO STUFF
throw new IOException("custom message", e);
}catch(Exception e){
throw new Exception("custom message", e);
}
return myString;
}
Run Code Online (Sandbox Code Playgroud)
Intellij 告诉我前两个是多余的,因为我最后有更一般Exception的,是这样吗?即使我明确抛出一个,
该方法Exception也会抛出一个IOException吗?
还是无论如何,通用异常都会被抛出堆栈,所以我什至不需要Exception最后?
IntelliJ 确实告诉您永远不会到达第二个 catch 块。FileNotFoundException是 的子类型IOException,因此如果发生此类异常,则执行第一个catch 块,因为IOException与FileNotFoundException被抛出的匹配。
catch 块总是按照它们被声明的顺序进行评估。这意味着如果您交换两个 catch 块,它将起作用。
根据您的评论,try-catchIntelliJ 注意到的不是块,而是throws子句。
这是因为对于受检异常,Java 强制您在方法声明中声明它们将被抛出。只需要在子句中声明最一般的例外throws。IDE 表示,因为您声明Exception为被抛出,所以不需要还声明 的任何子类Exception,因为这些情况已经被Exception.
但是,您可能仍然想要这样做的原因是向呼叫者提供更多信息。请参阅软件工程 StackExchange 上的此问答。
我强烈不鼓励您捕获过于笼统的异常。这通常是代码异味。
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |