【发布时间】:2018-10-27 09:53:42
【问题描述】:
嘿 StackOverflow 社区,
我正在尝试编写可以抛出和捕获多个异常的代码。 可能是什么问题?
我想得到这个输出:
Doing risky
Boi
Fooi
Fooi
Fooi
FINAAAL WIN
主类如下所示:
public class Dorisk {
public static void main(String[] args) {
Dorisk dora = new Dorisk();
try {
dora.Dorisky(1);
}catch(BoinkException bo){
System.out.println("Boi");
}catch(FooException fo){
System.out.println("Fooi");
}catch(BazException ba){
System.out.println("Baaai");
}finally{
System.out.println("FINAAAL WIN");
}
}
public void Dorisky(int x)throws BazException{
while( x < 5 ){
System.out.println("Doing risky");
if(x ==1){
throw new BoinkException();
}
if(x ==2){
throw new BiffException();
}
if(x ==3){
throw new BarException();
}
if(x ==4){
throw new FooException();
}
x++;
}
}
}
例外情况是:
public class BazException extends Exception{
public BazException(){
System.out.println("Baz baja");
}
}
public class FooException extends BazException{
public FooException(){
System.out.println("Foo baja");
}
}
public class BarException extends FooException{
public BarException(){
System.out.println("Bar baja");
}
}
public class BiffException extends FooException{
public BiffException(){
System.out.println("Biff baja");
}
}
public class BoinkException extends BiffException{
public BoinkException(){
System.out.println("Boink baja");
}
}
但我得到的是:
Doing risky
Baz baja
Foo baja
Biff baja
Boink baja
Boi
FINAAAL WIN
什么告诉我只有 doRisky 方法中的第一个异常被抛出,但是为什么?
感谢您的回答!
编辑:我现在明白了!第一个抛出的 Exception 打印了所有其他消息,因为它们是在 Exception 超类的构造函数中声明的,并且必须构造它们,这样子类才能运行。
【问题讨论】:
-
因为方法执行在 throw new BoinkException() 处停止。以下 if 不会被执行。
-
那为什么其他异常会被执行呢?
-
因为当你抛出异常时,异常之后的语句不会被执行!
-
throw与return类似,只是它一直被抛出调用方法,直到有人抓住它。