是否有任何情况(在实践中),在catch块中抛出异常是有用的?

时间:2017-02-17 11:59:00

标签: java exception

是否有任何情况(在实践中),在catch块中抛出异常是有用的?

例如

} catch (Exception e) {
    String msg = "ErrorExample";
    log.error(msg);
    throw new RuntimeException(msg, e);
}

4 个答案:

答案 0 :(得分:3)

如果必须实现一个缺少throws声明的接口方法,那么将已检查的异常包装到运行时异常中的这一特殊技巧非常有用。通过将真实异常包装到RuntimeException中,您可以有效地绕过已检查异常的机制,这可能是您可以使用的唯一内容 - 例如,当您无法控制正在实现的接口时。

这不是你应该经常做的事情,因为它使得检查过的异常实际上没用。如果你必须采用这种方法,抛出一个更具体的自定义运行时异常是一个更好的选择,因为你的代码变得更加明确你正在进行包装的原因。

答案 1 :(得分:2)

每当你追踪错误的时候,只需要恢复异常即可。只有你记得的是,抛出适当的例外。这绝对是正常的。

例如:

try {

  // receive user age as input 
  // try to parse user input to integer

} catch (Exception e) {

    throw new IllegalArgumentException("Please enter valid integer value", e);
}

答案 2 :(得分:0)

有许多不可预见的情况需要预测并创建异常以便在发生时处理它们。例如您希望用户在注册表单中上传照片,然后他们上传word文档或其他非​​图像文件的文件。

捕捉和处理异常的前提是可能会发生不利的可能性,并且在它开始之前就已经充分计划如何处理它,以免它破坏你的应用程序。对于在catch块中抛出Exception很有用的许多方法,这只是海洋中的一个下降

答案 3 :(得分:0)

许多框架和包用自己的异常类包装内部异常。这就是内部例外。是否使用已检查或未检查的异常是一个不相关的设计决策,并且有关于此主题的各种视图,请参阅[java checked vs unchecked exception explanation]。1