在 java 异常处理中,getmessage() 仅返回构造异常时传入的详细信息字符串,若未提供则为 null;而 tostring() 返回包含类名、冒号和详细信息的简短描述。获取完整堆栈跟踪信息应使用 printstacktrace() 或 arrays.tostring(getstacktrace())。

getMessage() 与 toString() 的具体行为差异
getMessage() 直接返回 detailMessage 字段,不附加任何前缀。如果创建异常时没有传递消息参数,该方法返回 null。toString() 方法默认实现为 getClass().getName() + ": " + getMessage()。这意味着它总是包含完整的异常类名,并在类名和消息之间添加冒号分隔符。如果消息为 null,toString() 仅返回类名,不包含冒号。

import java.util.Arrays;
public class ExceptionDemo {
public static void main(String[] args) {
try {
throw new IllegalArgumentException("Invalid input");
} catch (Exception e) {
System.out.println("getMessage: " + e.getMessage());
System.out.println("toString: " + e.toString());
System.out.println("stackTrace: " + Arrays.toString(e.getStackTrace()));
}
}
}
何时使用 toString() 而非 getMessage()
在日志记录或调试输出中,toString() 通常更有用,因为它提供了异常的完整类型信息。例如,在处理多个不同类型的异常时,toString() 能立即区分异常种类。而 getMessage() 更适合提取具体的错误原因进行业务逻辑判断。需要注意的是,两者都不包含堆栈跟踪信息,若需定位错误发生位置,必须使用 getStackTrace() 或 printStackTrace()。

import java.util.Arrays;
public class NullMessageDemo {
public static void main(String[] args) {
try {
throw new NullPointerException();
} catch (Exception e) {
System.out.println("getMessage: " + e.getMessage());
System.out.println("toString: " + e.toString());
}
}
}
基于 NullPointerException 无消息时的具体表现
当抛出如 NullPointerException 且未指定消息时,getMessage() 返回 null,而 toString() 仅返回类名如 java.lang.NullPointerException。这种行为差异在解析异常字符串时需特别注意,避免对 getMessage() 的结果直接调用字符串方法导致二次空指针异常。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











