我正在为考试做一些java练习,其中一些练习我有问题,比如:这是代码:
public class A1 {
public static void main(String [] argv)
throws Exception {
try {
m();
System.out.print(1);
}
catch( Exception u ) {
System.out.print(2);
}
finally {
System.out.print(3);
throw( new MyExc2() );
}
}
static void m()
throws Exception {
try {
System.out.print(4);
}
catch( MyExc2 t ) {
System.out.print(5);
}
catch( MyExc1 h ) {
throw( new MyExc1() );
}
catch( Exception b ) {
}
finally {
System.out.print(6);
}
}
}
异常层次结构为:
class MyExc1 extends Exception { }
class MyExc2 extends Exception { }
class MyExc3 extends MyExc2 { }
编译器给予我这个错误:“MyExc2的catch块不可达。try语句体不会抛出此异常”?为什么不可达的事实很重要,编译器不能忽略它吗?(抱歉我的英语不好,希望你能理解)
3条答案
按热度按时间iyfjxgzm1#
无法访问
MyExc2
的catch块中的代码,因为在System.out.print(4)
处调用的println
方法未声明引发MyExc2
异常的可能性。wpx232ag2#
你问的答案是更多的是知道为什么是遥不可及的,但我要离开我的观点:
有一些异常是永远不会在方法体中处理的,相反,您只需将其作为方法的一部分抛出,如下所示:
试着用那种方式来解决你的练习题,我也为你糟糕的英语感到抱歉。