class MyException extends Exception {
    MyException() {}
    MyException(String msg) { super(msg);}
}
public class NewException {

    static void f() throws MyException {
        System.out.println("throwing exception from f()");
        throw new ClassCastException();
    }
    static void g() throws MyException {
        System.out.println("throwing exception from g()");
        throw new MyException("parametrized ");
    }
    public static void main(String ...strings ) {
        try {
            f();
        }
        catch(MyException e) {
            e.printStackTrace(System.out);
        }
        try {
            g();
        }
        catch(MyException e) {
            e.printStackTrace(System.out);
        }
    }
}


在函数f()中,我指定将抛出“ MyException”异常,实际上,我正在引发与MyException无关的其他异常,但编译器仍然不会抱怨。为什么?

最佳答案

ClassCastException扩展了RuntimeException,这意味着它是unchecked,因此编译器不需要您处理它。

从Javadoc中的RuntimeException


  方法不需要在throws子句中声明任何
  RuntimeException的子类
  在执行过程中可能会抛出
  的方法,但未被发现。

10-08 13:38