java:抛出多个异常

标签 java exception

我读了一段代码:

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

我有一些问题:

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

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

3,我认为,没有必要使用那么多子类,因为异常消息已经在Exception中了。诸如 yyyxxx 之类的自定义消息不是很有帮助。

谢谢

最佳答案

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

关于java:抛出多个异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47355054/

相关文章:

Java Keystore.getKey() 缓慢,同时 key 存储大小增加

Java RestService 从日志文件写入和读取数据

Java For() 循环初始值错误,最终停止点错误

Java-Vaadin : NativeSelect setValue not working

.net - 使自定义 .NET 异常可序列化的正确方法是什么?

c# - 删除空文件夹并重新创建后出现 System.IO.DirectoryNotFoundException

java - 如何正确抛出运行时异常并重启docker容器

java - 在 Java 8 中,使用 wsimport 生成 java 类时缺少 MyServicePort.java 类

java - 我在 do while 循环中遇到问题,要求用户提供新文件,而前一个文件不起作用

java - Executor、线程池的捕获异常