膳绫擎method2的代铝闼楝try块捕获method1抛出的数据库异常SQLException后,抛出了新的自定义异常MyException。这段代码是否并没有什愦问题,但看一下控制台的输出:
- MyException:产生了数据库异常:对象名称'MyTable' 无效。
- at MyClass.method2(MyClass.java:232)
- at MyClass.method3(MyClass.java:255)
原始异常SQLException的信息损掉了,这里只能看到method2琅绫擎定义的MyException的客栈情况;而method1中产生的数据库异常的客栈则看不到,若何排错呢,只有在method1的代码行一一行行去寻找数据库操作语句了。
JDK的开辟者们也意识到了这个情况,在JDK1.4.1中,Throwable类增长了两个构造办法,public Throwable(Throwable cause)和public Throwable(String message,Throwable cause),在构造函数中传入的原始异常客栈信息将会在printStackTrace办法中打印出来。但对于还在应用JDK1.3的法度榜样员,就只能本身实现打印原始异常客栈信息的功能了。实现过程也很简单,只须要在自定义的异常类中增长一个原始异常字段,在构造函数中传入原始异常,然后重载printStackTrace办法,起首挪用览鲂保存的原始异常的printStackTrace办法,然后再调用super.printStackTrace办法就可以打印出原始异常信息了。可以如许定义前面代码中出现的MyException类:
- import java.io.PrintStream;
- import java.io.PrintWriter;
- public class MyException extends Exception
- {
- private static final long serialVersionUID = 1L;
- //原始异常
- private Throwable cause;
- //构造函数
- public MyException(Throwable cause)
- {
- this.cause = cause;
- }
- public MyException(String s,Throwable cause)
- {
- super(s);
- this.cause = cause;
- }
- //重载printStackTrace办法,打印出原始异常客栈信息
- public void printStackTrace()
- {
- if (cause != null)
- {
- cause.printStackTrace();
- }
- super.printStackTrace();
- }
- public void printStackTrace(PrintStream s)
推荐阅读
编者按:以前几年,开辟者几乎都邑用到开源。开源现象日益广泛,有赖于业内人士的聪明和尽力。不过,更重要的┞氛样开源本身的优势:可以或许随便马虎整合多种多样的开源解决筹划。在业内>>>详细阅读
本文标题:Java异常的深入研究与分析
地址:http://www.17bianji.com/lsqh/35587.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示