黑马程序员技术交流社区
标题:
在一次讨论关于异常的问题?
[打印本页]
作者:
严露华
时间:
2013-4-29 17:45
标题:
在一次讨论关于异常的问题?
本帖最后由 严露华 于 2013-4-29 17:47 编辑
看以下代码
class ExceptionA extends Exception {
public ExceptionA(String str) {
super(str);
}
}
class ExceptionB extends ExceptionA {
public ExceptionB(String str) {
super(str);
}
}
class ExceptionC extends ExceptionA {
public ExceptionC(String str) {
super(str);
}
}
public class NeverCaught {
static void f() throws ExceptionB{
throw new ExceptionB("exception b");
}
static void g() throws ExceptionC {
try {
f();
} catch (ExceptionB e) {
ExceptionC c = new ExceptionC("exception a");
throw c;
}
}
public static void main(String[] args) {
try {
g();
} catch (ExceptionC e) {
e.printStackTrace();
}
}
}
复制代码
打印出来的结果是
ExceptionC
at NeverCaught.g(NeverCaught.java:28)
at NeverCaught.main(NeverCaught.java:35)
为什么只打印出了ExceptionC而没有打印出ExceptionB呢?这些语句又是该如何执行的呢?
作者:
breeze
时间:
2013-4-29 18:12
因为你调用f()方法的时候将出现的ExceptionB异常处理了, 处理的方式是抛出了一个 ExceptionC c = new ExceptionC("exception a"); 自然结果就会是你抛出的新异常
static void f() throws ExceptionB{ //这里会抛出一个异常ExceptionB, 也就是调用这个方法会出现这个异常
throw new ExceptionB("exception b");
}
static void g() throws ExceptionC {
try {
f(); //调用这个方法时出现了异常, 被下面的catch处理了
} catch (ExceptionB e) { //捕获了ExceptionB异常, 下面对其进行了处理
ExceptionC c = new ExceptionC("exception a"); //创建了一个新的异常对象
throw c; //将这个新的异常抛出
}
}
作者:
殇_心。
时间:
2013-4-29 18:14
楼主你有必要搞这么复杂嘛。。
我都看花眼了。
第一步:g();
第二步:f(); 抛出异常b。
第三步:g() 里面catch处理。抛出一个新异常c。
第四步:回到main,catch处理。打印异常c。
作者:
xiewen
时间:
2013-4-30 17:14
你把f()方法的异常给catch住了,但在catch块里打印的是ExceptionC的信息,所以没有打印ExceptionB的信息。
作者:
曹睿翔
时间:
2013-5-2 06:32
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2