日期:2014-05-20  浏览次数:20639 次

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

------解决方案--------------------
所以提出第一个问题:为什么RuntimeException及其子类有如此特权?

=========
讨论这个跟讨论为什么抛出已检查异常一定要在方法中声明一样
有意义?