Exception.getMessage() 为空

新手上路,请多包涵

在我的 Java 代码中,它正在检查 !null 条件并抛出 Exception

例如

try
{
    if (stud.getCall() != null)
        acc.Call = stud.getCall().toString();
    else
        throw new Exception("Data is null");
}
catch (Exception e)
{
    logger.error("Some Error" + e.getMessage());
    throw new Exception("Please check the Manatadatory Field is Missing" + e.getMessage());
}

但在日志中我得到:

 Some Error null

为什么 e.getMessage null

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

阅读 1.5k
1 个回答

您正在捕获与您的代码显式创建并抛出1的 _异常不同的异常_。您捕获的异常没有消息。

您需要记录整个异常,而不仅仅是异常的消息。除其他事项外,这会告诉您捕获的异常的实际类是什么以及创建/抛出异常的位置。

基于异常没有消息这一事实,我猜它是由 studacc 为空,或 stud.getCall() 引起的 NPE --- 返回 null … 或类似的东西。本机(即由 JVM)生成的 NullPointerException 具有 null 消息2 。


投掷 java.lang.Exception 是不好的做法

你的问题说明了为什么创建/抛出 Exception 通常是个坏主意

当您抛出 Exception 时,几乎不可能区分它和 catch 子句中的其他(意外)异常。这就是这里发生的事情:您捕获了 错误 的异常。

您应该选择一个更具体的例外,如果不存在合适的例外,请实施您自己的例外。


1 - 您可以使用 e.printStackTrace() 、记录器调用或调试器来查看您实际捕获了哪个异常。

2 - 这在 Android 上不是真的。在那里,NPE 有一条有用的消息,提供上下文信息。在 Java 14 及更高版本中也不再适用;请参阅 https://openjdk.java.net/projects/jdk/14/https://openjdk.java.net/jeps/358

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

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