转载自:https://www.cnblogs.com/lyh421/p/6678360.html
我使用的时候,抛出了空指针异常,本来是想将异常信息显示在errorInfo里,却发现没有拿到错误信息。
原因:我用的是getMessage()。
1 用e.getMessage() 时,返回的是null。
2 用e.toString()时,才返回错误信息:空指针异常。
示例代码1:
1 public class TestInfo {
2
3 private static String str =null;
4 public static void main(String[] args) {
5 System.out.println("test exception");
6 try {
7 if(str.equals("name")){
8 System.out.println("test exception");
9 }
10 } catch (Exception e) {
11 System.out.println(e.toString());
12 System.out.println(e.getMessage());
13 }
14 }
15 }
输出结果:java.lang.NullPointerException null
示例代码2:
1 public class TestInfo {
2
3 private static int m = 0;
4 public static void main(String[] args) {
5 System.out.println("test exception");
6 try {
7 m = 899/0;
8 } catch (Exception e) {
9 System.out.println(e.toString());
10 System.out.println(e.getMessage());
11 }
12 }
13 }
输出结果:
1 java.lang.ArithmeticException: / by zero
2 / by zero
总结:由此可以看出,e.toString()获取的信息包括异常类型和异常详细消息,而e.getMessage()只是获取了异常的详细消息字符串。
所以以后项目里输出异常一定要输出e,这会打印出完整的堆栈信息。
重要的事情说三遍:输出异常到日常请输出e而不是e.getMessage()!
输出异常到日常请输出e而不是e.getMessage()!
输出异常到日常请输出e而不是e.getMessage()!