在 Java 中设置异常原因

新手上路,请多包涵

我可以看到捕捉到一个异常,我可以打印 e.getCause() ,尽管它总是 null

我需要将它设置在某个地方,还是缺少将原因设置为 null 的东西?

原文由 Vik 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 529
2 个回答

异常具有属性 messagecause 。该消息是一种描述,或多或少准确地告诉人类读者出了什么问题。 cause 有所不同:如果可用,它是另一个(嵌套) Throwable

如果我们像这样使用自定义异常,则经常使用这个概念:

 catch(IOException e) {
  throw new ApplicationException("Failed on reading file soandso", e);
  //                              ^ Message                        ^ Cause
}

回应 djangofan 的评论

标准是嵌套表达式(原因)也与其堆栈跟踪一起打印。

运行这个小应用程序

public class Exceptions {
    public static void main(String[] args) {
        Exception r = new RuntimeException("Some message");
        throw new RuntimeException("Some other message", r);
    }
}

将输出

Exception in thread "main" java.lang.RuntimeException: Some other message
    at Exceptions.main(Exceptions.java:4)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.RuntimeException: Some message
    at Exceptions.main(Exceptions.java:3)
    ... 5 more

两条消息都包含在内。

原文由 Andreas Dolk 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题