gpt4 book ai didi

java:抛出多个异常

转载 作者:行者123 更新时间:2023-12-02 11:59:49 31 4
gpt4 key购买 nike

我读了一段代码:

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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com