java - Exception.getMessage() 为空

标签 java exception

在我的 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。您捕获的异常没有消息。

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

基于异常没有消息的事实,我猜它是由 studacc 为空或由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/

相关文章:

java - 使 java SingleFrameApplication 出现在第二位

java - Android Java - 下载管理器未使用正确的名称保存

java - 当我单击“否”或“取消”选项时,为什么此 JOptionPane 程序没有关闭?

java - 调用 Scanner.close() 抛出 nosuchelementexception

java - 在这个简单的类中是否有任何需要避免的异常?

java - 如何在 android 中的对象框数据库中插入对象列表?喜欢房间数据库

Java - 为什么等待多个信号量不起作用?

java - 如何从不同的我返回 double 和字符串

c# - 如何捕获 DbUpdateException 唯一异常?

java - UCanAccess数据异常: numeric value out of range