我已经开始研究Java中的异常,但是我不明白为什么这段代码的输出是:
Throw SimpleException from f()
Cought it!
代码是这样的:
class SimpleException extends Exception {} public class InheritingExceptions { public void f() throws SimpleException{ System.out.println("Throw SimpleException from f()"); throw new SimpleException(); } public static void main(String[] args) { InheritingExceptions sed = new InheritingExceptions(); try { sed.f(); } catch (SimpleException e) { System.out.println("Cought it!"); } } }
答案 0 :(得分:1)
您的代码在做什么:
1)创建一个名为sed的新InheritingExceptions对象。
2)用try-catch块包装sed.f()方法。 catch块正在捕获try {}
中引发的任何SimpleException。3)sed调用方法f()。 f()正在执行以下操作:
4)由于f()方法引发了SimpleException,因此您的try-catch块将其捕获。当被捕获时,它会打印到控制台“ Cought it!”。
class SimpleException extends Exception {}
public class InheritingExceptions {
public void f() throws SimpleException{
System.out.println("Throw SimpleException from f()");
throw new SimpleException();
}
public static void main(String[] args) {
InheritingExceptions sed = new InheritingExceptions();
try {
sed.f();
} catch (SimpleException e) {
System.out.println("Cought it!");
}
}
}
答案 1 :(得分:0)
看,当您在main内部进行此操作时:
sed.f();
您正在调用该函数,并且在该函数f()中,您正在打印“从f()抛出SimpleException”并抛出异常。在main内部,您正在捕获该异常并打印“ Cought it!”。
答案 2 :(得分:0)
因为在main()
方法中创建了InheritingExceptions类的对象
并使用此对象调用InheritingExceptions类的f()
方法。
f()
已打印“从f()抛出SimpleException ”,因此您的第一条输出行将是此行。
同样,f()
抛出SimpleException(),同时从您使用过f()
的{{1}}方法调用main()
时,此块将捕获try-catch block
方法和代码抛出的异常内
catch块将被执行,该执行将打印您的第二条语句“ 已购买!”