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
}
}
sub1MyException
和 sub2MyException
都是 MyException
的子 class。 AlreadyExistsException
是 不是 MyException
的子 class。
我有一些问题:
1、throw new sub1MyException("yyy");
会不会被第二个catch块捕获?
2、以上代码中的任何反模式。我做了一些搜索,但没有找到任何类似的模式或示例。有的话欢迎留言。
3,我觉得,没必要用那么多子classes,因为异常信息已经在Exception
中了。 yyy
和 xxx
等自定义消息不是很有用。
谢谢
1) 不会的。它不在 try-catch 中。
2 & 3 - 这取决于您需要做什么。如果您需要以不同的方式处理不同的异常,那么就这样做。否则你只能捕获异常。
- 不,您必须在
catch
中嵌套一个 try-catch
块才能实现。
- 捕捉
Exception
本身就是一种反模式,但它的使用如此广泛,以至于人们不再真正关心它了。你不应该真正抓住 Exception
因为那样你基本上不知道你在期待什么(try-catch
块是关于可预测性的)。你应该一揽子捕获的唯一地方 Exception
是在处理最终错误分派的一般错误处理程序中(显示一个丑陋的大错误消息,记录错误等)
- 如果您的错误唯一不同之处在于错误消息,那么不,区分它们是没有用的。如果它们传播的方式不同(例如,一个是可恢复错误,另一个是运行时错误),那么您应该加以区分。经验法则是,如果它们的传播策略不同(即它们在更远的道路上处理的
try-catch
块),您应该只使用不同的 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
}
}
sub1MyException
和 sub2MyException
都是 MyException
的子 class。 AlreadyExistsException
是 不是 MyException
的子 class。
我有一些问题:
1、throw new sub1MyException("yyy");
会不会被第二个catch块捕获?
2、以上代码中的任何反模式。我做了一些搜索,但没有找到任何类似的模式或示例。有的话欢迎留言。
3,我觉得,没必要用那么多子classes,因为异常信息已经在Exception
中了。 yyy
和 xxx
等自定义消息不是很有用。
谢谢
1) 不会的。它不在 try-catch 中。
2 & 3 - 这取决于您需要做什么。如果您需要以不同的方式处理不同的异常,那么就这样做。否则你只能捕获异常。
- 不,您必须在
catch
中嵌套一个try-catch
块才能实现。 - 捕捉
Exception
本身就是一种反模式,但它的使用如此广泛,以至于人们不再真正关心它了。你不应该真正抓住Exception
因为那样你基本上不知道你在期待什么(try-catch
块是关于可预测性的)。你应该一揽子捕获的唯一地方Exception
是在处理最终错误分派的一般错误处理程序中(显示一个丑陋的大错误消息,记录错误等) - 如果您的错误唯一不同之处在于错误消息,那么不,区分它们是没有用的。如果它们传播的方式不同(例如,一个是可恢复错误,另一个是运行时错误),那么您应该加以区分。经验法则是,如果它们的传播策略不同(即它们在更远的道路上处理的
try-catch
块),您应该只使用不同的Exception
类。