在我的 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的 _异常不同的异常_。您捕获的异常没有消息。
您需要记录整个异常,而不仅仅是异常的消息。除其他事项外,这会告诉您捕获的异常的实际类是什么以及创建/抛出异常的位置。
基于异常没有消息这一事实,我猜它是由
stud
或acc
为空,或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