java:多异常抛出

java:多异常抛出,java,exception,exception-handling,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

我读了一段代码:

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,将
抛出新的sub1MyException(“yyy”)被第二个捕捉块捕捉?

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

3,我认为没有必要使用这么多子类,因为异常消息已经在
exception
中了。自定义消息,如
yyy
xxx
没有太大帮助

谢谢,不会的。它不在试一试的范围内

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

  • 不,您必须在
    catch
    中嵌套一个
    try-catch
    块才能实现这一点
  • 捕捉异常本身就是一种反模式,但它的应用如此广泛,以至于人们不再真正关心它。您不应该真正捕获
    异常
    ,因为这样您基本上不知道您期望的是什么(而
    try catch
    块是关于可预测性的)。您应该将catch
    Exception
    放在处理最终错误分派的通用错误处理程序中(显示一条丑陋的错误消息、记录错误等)
  • 如果您的错误唯一不同的地方是错误消息,那么不,区分它们是没有用的。如果它们的传播方式不同(例如,一个是可恢复错误,另一个是运行时错误),那么您应该进行区分。经验法则是,如果
    Exception
    类的传播策略不同(即
    try-catch
    块在以后的道路上被处理),则应该只使用不同的
    Exception

  • 1.很容易测试/2。我会说不。最好不要依赖信息。我的意思是
    newsomeexception(“错误1”)
    对于其他的
    newsomeexception(“错误2”)
    在大多数情况下是一个错误的想法: