我读了一段代码:
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
的子类。
我有一些问题:
1,throw new sub1MyException("yyy");
会被第二个捕获区捕获吗?
2,上述代码中的任何反模式。我做了一些搜索,但没有找到任何类似的模式或例子。如果有的话,请发表评论。
3,我认为,没有必要使用这么多的子类,因为Exception
中已有异常消息。 <{1}}和yyy
等自定义消息不太有用。
由于
答案 0 :(得分:1)
try-catch
内嵌入catch
块才能实现此目的。 Exception
本身就是一种反模式,但它如此广泛使用,人们不再关心。你不应该真正抓住Exception
因为那时你基本上不知道你期望什么(而try-catch
块是关于可预测性的)。你应该覆盖Exception
的唯一地方是一个通用的错误处理程序,它处理最后的错误调度(显示一个很难看的错误消息,记录错误等)。Exception
阻止它们在未来的路上处理),您应该只有不同的try-catch
类。答案 1 :(得分:0)
1)不,不会。它不在try-catch中。
2&amp; 3 - 这取决于你需要做什么。如果您需要以不同的方式处理不同的异常,那么这样做。否则你可以捕获异常。