首页 > 其他 > 详细

较真儿Runtime Exception与Checked Exception

时间:2014-02-28 10:12:25      阅读:497      评论:0      收藏:0      [点我收藏+]

今天遇到了这样一段代码,代码中有一个try catch,但是奇怪的是try括起来的代码中的方法调用都不会抛异常,这是什么情况呢?

首先,我们所说的“不会抛异常”,是指调用的方法签名中并没有throw exception。也就是说调用方法不会抛出checked exception。那么还有一种可能就是这个方法可能会抛出runtime exception。

于是第一个问题是:我们知道runtime exception可以被JVM捕获,runtime exception也可以被try catch捕获吗?

于是写了一个小例子验证了一下:

try{
    throw new RuntimeException();
}
catch (Exception ex) {
    System.out.println("runtime exception can be catched by try catch block.")
}

结果是:啊!原来runtime exception是可以被try catch捕获到的呀!!

第二个问题:这种用try catch捕获runtime exception的代码貌似不常见吧(虽然我也没有见过太多代码),为什么呢?

那么什么是runtime exception,经过查了一些资料,我的理解是这样的:

首先java程序运行中的问题,会分为exception和error两种。其中error是指无法恢复的严重情况,比如之前用c语言时常见的stackoverflow等内存不够用的错误。对于exception而言,又可以分为checked exception和unchecked exception。

bubuko.com,布布扣

个人理解,概念的分类(比如上面的两次分类)都是因为当时定义概念的时候是相对而言的,也就是存在一个度,在这个度的左边,就是error,在右边,就是exception。对于checked exception和runtime exception也是一样的。所以,我们要理解runtime exception就要先理解什么叫做checked exception。

checked exception,使用“顾名思义”这种最简单的理解方式,他指的是java编译器所能够识别(check)出来的exception。那么编译器是没有那么聪明的,他的做法猜测就是看到某个地方有throw exception这样的动作,就必须在调用层中要么发现throw exception,要么发现catch到该exception。当然,对于checked exception,也可以一直throw,知道throw出main函数被JVM捕获。从这个角度理解,checked exception指的就是用throw语句显式抛出的异常。也就是写API的人预想到某种情况下,可能会出问题,并且这个问题值得被处理,那么就会在某个if分支下抛出异常,然后也就创造出了一个checked exception。

插播一句话,不对编译错误显示红色的IDE不是好IDE。

那么相对而言,runtime exception就不一样了,写API的人没有将可能发生runtime exception的情况用if写下来并且throw exception。原因可能有多种,比如对于常见的runtime exception,对于NullPointerException和ArrayIndexOutOfBoundException,这种错误都是programmer可以通过严格的编码来避免的。因此也就是不值得API的设计人员专门写一个if分支来处理这种问题。对于runtime exception的处理,可以通过try catch来处理,也可以不做处理,直接交给JVM。

好像内容有点浅,先把博客放在这里,以后有了其他认识再来更新吧。

较真儿Runtime Exception与Checked Exception,布布扣,bubuko.com

较真儿Runtime Exception与Checked Exception

原文:http://www.cnblogs.com/Garfield-yafei/p/3571786.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!