getMessage() 返回异常的简要描述信息,不包含堆栈跟踪;手动抛出时返回构造参数字符串,无参构造或某些异常(如 NullPointerException)返回 null;使用时应判空,推荐 Objects.toString(e.getMessage(), "") 或 getLocalizedMessage()。

getMessage() 是 Java 中 Throwable 类(包括所有异常类)提供的一个方法,用于获取异常的**简要描述信息**,也就是异常发生时传入构造函数的字符串消息。它不包含堆栈跟踪,只返回开发者显式设置或系统自动生成的“一句话说明”。
什么时候 getMessage() 有内容?
大多数情况下,getMessage() 返回的是构造异常时传入的字符串:
- 手动抛出异常时明确指定:
throw new IllegalArgumentException("用户名不能为空");→getMessage()返回"用户名不能为空" - 某些运行时异常由 JVM 自动填充,比如
NullPointerException默认返回null(注意:不是空字符串),而ArrayIndexOutOfBoundsException(5)可能返回"Index 5 out of bounds for length 3" - 如果构造异常时没传消息(如
new RuntimeException()),getMessage()返回null
怎么安全地使用 getMessage()?
因为可能返回 null,直接打印或拼接容易触发 NullPointerException。建议先判空或用更稳妥的方式:
- 用
Objects.toString(e.getMessage(), "")转成空字符串 - 或者直接用
e.getLocalizedMessage()(多数情况下和getMessage()行为一致,但支持本地化) - 日志中推荐用
logger.error("操作失败", e),让日志框架自动处理完整信息
getMessage() 和 printStackTrace() / toString() 的区别
getMessage() 只是其中一小段:
立即学习“Java免费学习笔记(深入)”;
-
e.toString()=e.getClass().getName() + ": " + e.getMessage()(如"java.lang.NumberFormatException: For input string: \"abc\"") -
e.printStackTrace()输出完整堆栈,含类名、方法、行号,适合调试,但不适合直接展示给用户 - 面向用户提示时,应优先用
getMessage()(需清洗和翻译),而不是裸露堆栈
一个小例子
try {
Integer.parseInt("xyz");
} catch (NumberFormatException e) {
System.out.println("提示:" + Objects.toString(e.getMessage(), "未知错误"));
// 输出:提示:For input string: "xyz"
}


















