在我的 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
?
最佳答案
您正在捕获一个与您的代码显式创建和抛出的异常不同的异常1。您捕获的异常没有消息。
您需要记录整个异常,而不仅仅是异常的消息。除其他外,这将告诉您捕获的异常的实际类是什么以及异常是在哪里创建/抛出的。
基于异常没有消息的事实,我猜它是由 stud
或 acc
为空或由stud.getCall()
返回 null
...或类似的东西。本地(即由 JVM)生成的 NullPointerException
具有 null
消息2。
抛出 java.lang.Exception
是不好的做法
您的问题说明了为什么通常来说创建/抛出 Exception
当您抛出 Exception
时,几乎不可能在 catch
子句中区分它和其他(意外)异常。这就是这里发生的事情:您捕获了错误异常。
您应该选择一个更具体的异常(exception),如果不存在合适的异常(exception),请实现您自己的异常(exception)。
1 - 您可以使用 e.printStackTrace()
、记录器调用或调试器来查看您实际捕获的异常。
2 - 这在 Android 上是不正确的。在那里,NPE 有一条有用的消息,提供上下文信息。在 Java 14 及更高版本中也不再适用;见 https://openjdk.java.net/projects/jdk/14/和 https://openjdk.java.net/jeps/358
关于java - Exception.getMessage() 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8237080/