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的子类
在执行过程中可能会抛出
的方法,但未被发现。