关于java的Exception的getMessage()是否为null的问题
2015-12-09 10:51
459 查看
这几天做的项目,测试小组说测出来的异常日志有问题,没有把异常的信息打印出来,但是我回去看代码每一个catch语句里面都有getMessage呀,怎么getMessage会为空的呢?很是不懂其中的原因,之后上百度搜了下资料,觉得有下面一丢丢的总结,不知道正确不,不妥的地方希望各位大神帮我补充下
java的异常关系图如下
:
测试小组说的那个没有getMessage信息打印出来的异常就是一个nullPointerException异常,后面我又去动手试了下其他的几个runtime异常,发现getMessage都是为空的,之后我又去试了下SQLException和IOException,发现者两种异常的在catch的时候getMessage是不为null的。由此我觉得runtime异常发生的时候JVM调用的是父类无参的构造器
public Exception() {
super();
}
而SQLException和IOException异常发生的时候JVM调用的是父类有参的构造器
public Exception(String message) {
super(message);
}
所以SQLException和IOException的getMessage不为null,而runtime异常却为空。但是为什么SQLException和IOException调用的是有参的,而runtime异常调用的是无参,我还不知道具体原因,但是避免getMessage为null的话可以使用e.printStackTrace()或者logger.error("msg",
e)把异常的信息打印出来。
java的异常关系图如下
:
测试小组说的那个没有getMessage信息打印出来的异常就是一个nullPointerException异常,后面我又去动手试了下其他的几个runtime异常,发现getMessage都是为空的,之后我又去试了下SQLException和IOException,发现者两种异常的在catch的时候getMessage是不为null的。由此我觉得runtime异常发生的时候JVM调用的是父类无参的构造器
public Exception() {
super();
}
而SQLException和IOException异常发生的时候JVM调用的是父类有参的构造器
public Exception(String message) {
super(message);
}
所以SQLException和IOException的getMessage不为null,而runtime异常却为空。但是为什么SQLException和IOException调用的是有参的,而runtime异常调用的是无参,我还不知道具体原因,但是避免getMessage为null的话可以使用e.printStackTrace()或者logger.error("msg",
e)把异常的信息打印出来。
相关文章推荐
- 下一代Eclipse 步入云端
- JAVA学习笔记2---static、new、final以及java引用的实质
- [持续更新]Eclipse工具的各宗疑难杂症
- Single Number leetcode java
- 表单提交数据量大于2m,java 后台接受不到表单传递过来的数据
- [置顶] 20151209struts简单传值
- JAVA中常见的几种RuntimeException
- eclipse jni opencv 报错: unresolved inclusion <string>
- Java将图片压缩为原来的一半
- Java 文件输入、复制
- Spring:整合Struts1
- 【eclipse】更新SDK后,启动时报错“error when loading the SDK”
- 了解 Spring Data JPA
- eclipse 连接手机时提示问号或offline
- 打印图形--第一个java程序
- 【java基础】hashcode与equals分析
- Java 通过代理测试webService接口
- spark环境下实现 CountOnce(NumOnce)
- JSON for java入门
- Eclipse自动编译NDK/JNI的三种方法