我读了一段代码:
public void myfunc() throws MyException {
try {
// codes here
} catch(AlreadyExistsException e) {
throw new sub1MyException("yyy"); // first catch block
} catch(Exception e) {
throw new sub2MyException("xxx"); // second catch block
}
}
sub1MyException
和 sub2MyException
都是 MyException
的子类。 AlreadyExistsException
是 MyException
的NOT子类。
我有一些问题:
1、throw new sub1MyException("yyy");
会被第二个catch block 捕获吗?
2、上述代码中的任何反模式。我做了一些搜索,但没有找到任何类似的模式或例子。如果有的话请留言。
3,我认为,没有必要使用那么多子类,因为异常消息已经在Exception
中了。诸如 yyy
和 xxx
之类的自定义消息不是很有帮助。
谢谢
最佳答案
- 不可以,您必须在
catch
中嵌套一个try-catch
block 才能实现这一点。 - 捕获
Exception
本身就是一种反模式,但它的使用如此广泛,以至于人们不再真正关心。你不应该真正捕获Exception
,因为那样你基本上不知道你期望什么(而try-catch
block 是关于可预测性的)。唯一应该捕获Exception
的地方是处理最终错误调度的通用错误处理程序(显示一个丑陋的大错误消息、记录错误等) - 如果您的错误唯一不同之处在于错误消息,那么不,区分它们是没有用的。如果它们的传播方式存在差异(例如,一个是可恢复错误,另一个是运行时错误),那么您应该区分。经验法则是,如果它们的传播策略不同(即,在其中处理它们的
try-catch
block ),那么您应该只拥有不同的Exception
类。路)。
关于java:抛出多个异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47355054/