我有以下代码。实际上,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,这就是您收到错误的原因。

10-08 16:07