由于SCJP备考,复习一些基础知识,发现不少有意思的问题。
java异常处理机制,如果没有特别的留意,很可能犯错。
如以下代码,
void test2(){
throw new ArithmeticException();
}
编译通过,并也能够顺利执行。这与书上说的java 异常处理机制不同,书上说'方法体内抛出的任何异常该方法都要在throws列出'。但是在JDK API的帮助文档中又这么说:'RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。 可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。';ArithmeticException是RuntimeException的子类,按照API文档来讲,上述代码完全无问题。所以提出第一个问题:为什么RuntimeException及其子类有如此特权?
------解决方法--------------------------------------------------------
所以提出第一个问题:为什么RuntimeException及其子类有如此特权?
=========
讨论这个跟讨论为什么抛出已检查异常一定要在方法中声明一样
有意义?