Java异常处理

Amm*_*mmu 1 java exception-handling

我有以下代码.在这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");
    }
}
}
Run Code Online (Sandbox Code Playgroud)

ins*_*ity 10

编译器不知道/不能知道在运行时不会抛出任何异常,fn2()因为它声明它可能抛出异常,这就是你得到错误的原因.

  • 换句话说:如果你告诉它**方法`抛出异常`那么编译器将**相信你**.它不会检查是否实际情况(在某些情况下他甚至无法检查). (4认同)