JiveJdon Community Forums
在线86人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
google yahoo 365Key网摘 CSDN网摘 添加到百度搜藏 POCO网摘 新浪ViVi 天极网摘
???en_US.forumThreadNext.name??? 下一主题
Go 共有 0 回复 / 1
 发表新帖子   回复该主题贴
wilson751

悄悄话
发表文章: 54
注册时间: 2005年10月11日 11:22
关于java exception的一个小问题… 2006年12月22日 20:51 到本帖网址 加入本帖到收藏夹 回复该主题
标签
有如下一小段程序:

异常基类
public class BaseException extends Exception {
protected Throwable rootCause = null;

protected BaseException() {}

protected BaseException(Throwable rootCause) {
this.rootCause = rootCause;
}

public Throwable getRootCause() {
return this.rootCause;
}

public void setRootCause(Throwable rootCause) {
this.rootCause = rootCause;
}

public void printStackTrace() {
printStackTrace(System.err);
}

public void printStackTrace(PrintStream out) {
printStackTrace(new PrintWriter(out));
}

public void printStackTrace(PrintWriter writer) {
super.printStackTrace(writer);

//输出原始异常
if(getRootCause() != null) {
//e.printStackTrace(..);
getRootCause().printStackTrace(writer);
}

writer.flush();
}
}

异常子类
public class UploadException extends BaseException {}

模拟的接口类:
public class InterfaceClass {
public void test() throws UploadException {
try {
throw new IOException();
}catch(IOException ioe) {
//log the original exception
UploadException ue = new UploadException();
ue.setRootCause(ioe);
throw ue;
}
}
}


前端程序:
public class ClientClass {
public static void main(String[] args) {
try{
new InterfaceClass().test();
}catch(UploadException ue) {
ue.printStackTrace();
}
}
}


当执行ClientClass时,到new InterfaceClass().test();时,InterfaceClass的test()方法抛出IOException异常,被catch后,包装为BaseException的子类UploadException,最后在ClientClass的main()方法中被捕捉:ue.printStackTrace();,运行后得到的结果是:

org.test.util.exception.UploadException
[java] at org. test.util.exception.InterfaceClass.test(InterfaceClass.java:13)
[java] at org. test.util.exception.ClientClass.main(ClientClass.java:6)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[java] at java.lang.reflect.Method.invoke(Method.java:324)

java.io.IOException
[java] at org. test.util.exception.InterfaceClass.test(InterfaceClass.java:9)
[java] at org. test.util.exception.ClientClass.main(ClientClass.java:6)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[java] at java.lang.reflect.Method.invoke(Method.java:324)


输出UploadException,这点我能理解,可以为什么java.io.IOException也被输出呢?它仅仅是
UploadException的一个属性而已,请各位指点迷津,多谢!
标签
共有 0 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG:
正在读取,请等待...
查询本论坛内 回复超过的热门帖子
标题
 
粗体: [b]文本[/b] 斜体: [i]文本[/i] 下划线 [u]文本[/u] 插入图片 [img]http://wwww.xxxx.com/img.ext[/img] 插入代码 [code]程序代码[/code]  插入url链接 [url]http://url[/url] / [url=http://url]URL加下滑线[/url] 插入附件 插入word文档 Txt等文件
内容
  提交时自动拷贝以上内容到剪贴板 Ctrl-V可取出;提问题前先查询标签列表

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区 推荐Chrome快速浏览本站
OpenSource JIVEJDON v3.5 Powered by JdonFramework Code © 2002-09 jdon.com

anti spam