java:抛出多个异常

时间:2017-11-17 16:22:23

标签: java exception exception-handling

我读了一段代码:

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的子类。 AlreadyExistsException MyException的子类。

我有一些问题:

1,throw new sub1MyException("yyy");会被第二个捕获区捕获吗?

2,上述代码中的任何反模式。我做了一些搜索,但没有找到任何类似的模式或例子。如果有的话,请发表评论。

3,我认为,没有必要使用这么多的子类,因为Exception中已有异常消息。 <{1}}和yyy等自定义消息不太有用。

由于

2 个答案:

答案 0 :(得分:1)

  1. 不,您必须在try-catch内嵌入catch块才能实现此目的。
  2. 捕捉Exception本身就是一种反模式,但它如此广泛使用,人们不再关心。你不应该真正抓住Exception因为那时你基本上不知道你期望什么(而try-catch块是关于可预测性的)。你应该覆盖Exception的唯一地方是一个通用的错误处理程序,它处理最后的错误调度(显示一个很难看的错误消息,记录错误等)。
  3. 如果您的错误唯一不同之处在于错误消息,那么不,区别它们没有用处。如果它们的传播方式不同(例如,一个是可恢复的错误而另一个是运行时错误),那么您应该区分。拇指的规则是,如果它们的传播策略不同(即Exception阻止它们在未来的路上处理),您应该只有不同的try-catch类。

答案 1 :(得分:0)

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

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