下面的代码:异常已经陷入错误
public class Exc {
int x = 2;
public void throwE(int p) throws Excp, Excp2 {
if(x==p) {
throw new Excp();
}
else if(x==(p+2)) {
throw new Excp2();
}
}
}
这里的处理代码:
public class tdExc {
public static void main(String[] args) {
Exc testObj = new Exc();
try {
testObj.throwE(0);
System.out.println("This will never be printed, so sad...");
} catch(Exception Excp) {
System.out.println("Caught ya!");
} catch(Exception Excp2) {
System.out.println("Caught ya! Again!!!!");
} finally {
System.out.println("This will always be printed!");
}
}
}
Excp
和Excp2
都伸出Exception
,并有类似的代码(无)。现在我得到的错误Exception has already been caught
错误在Excp2
,不管我是否提供2或0到throwE
方法。
但是Excp2的类型是Exception(因为它扩展了Exception类)。您提供的修复工作正常,但我不明白使用'Excp2 excp2',这不是说类型是Excp2吗? 另外,log(excp2)'有什么用? – MoonStruckHorrors 2010-07-11 11:47:53
@MoonStruckHorrors - 'log'只是为了演示它如何使用。我认为你在**继承**中缺少一些基本的东西,而例外是开始学习这个非常重要的主题的一种不好的方式。简而言之,确实是抛出了一个'Exception',但是你抛出一个'Excp2'有点真实* - 这对Java有所不同。 – Kobi 2010-07-11 11:52:36
我接过你的话,并试图从头开始理解它。你是对的,我忽略了继承的基础知识。我以不同的方式尝试过。我没有使用'throw new Excp()',而是使用了更长的方法。 'Excp xyz = new Excp();扔xyz;'。我终于明白'Excp'就像一个普通的类,并且使用'new Excp()',我们只是创建一个新的实例/对象。谢谢。 – MoonStruckHorrors 2010-07-11 12:04:52