java: 多次抛出异常

java: multiple exception throwing

我看了一段代码:

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
        }
}

sub1MyExceptionsub2MyException 都是 MyException 的子 class。 AlreadyExistsException 不是 MyException 的子 class。

我有一些问题:

1、throw new sub1MyException("yyy");会不会被第二个catch块捕获?

2、以上代码中的任何反模式。我做了一些搜索,但没有找到任何类似的模式或示例。有的话欢迎留言。

3,我觉得,没必要用那么多子classes,因为异常信息已经在Exception中了。 yyyxxx 等自定义消息不是很有用。

谢谢

1) 不会的。它不在 try-catch 中。

2 & 3 - 这取决于您需要做什么。如果您需要以不同的方式处理不同的异常,那么就这样做。否则你只能捕获异常。

  1. 不,您必须在 catch 中嵌套一个 try-catch 块才能实现。
  2. 捕捉 Exception 本身就是一种反模式,但它的使用如此广泛,以至于人们不再真正关心它了。你不应该真正抓住 Exception 因为那样你基本上不知道你在期待什么(try-catch 块是关于可预测性的)。你应该一揽子捕获的唯一地方 Exception 是在处理最终错误分派的一般错误处理程序中(显示一个丑陋的大错误消息,记录错误等)
  3. 如果您的错误唯一不同之处在于错误消息,那么不,区分它们是没有用的。如果它们传播的方式不同(例如,一个是可恢复错误,另一个是运行时错误),那么您应该加以区分。经验法则是,如果它们的传播策略不同(即它们在更远的道路上处理的 try-catch 块),您应该只使用不同的 Exception 类。