我有以下代码。实际上,fn2
引发异常,并且被函数本身捕获。在函数fn1
中,编译器抱怨未处理的异常,因为声明fn2
引发异常。
为什么会这样呢?由于异常是在fn2
中捕获的,因此不应抱怨吗?
请解释行为。
public class ExepTest {
/**
* @param args
*/
public static void main(String[] args) {
ExepTest exT = new ExepTest();
exT.fn1();
}
public void fn1(){
fn2();//compilation error
}
public void fn2() throws Exception{
try{
throw new Exception();
}
catch(Exception ex){
System.out.println("Exception caught");
}
}
}
最佳答案
编译器不知道/不知道在运行时fn2()
不会引发任何异常,因为它声明可能会引发Exception,这就是您收到错误的原因。