JAVA CheckedException UncheckedException

来源:互联网 发布:淘宝飞猪旅行好不好 编辑:程序博客网 时间:2024/06/15 06:53

在Java中,异常主要分为三种:Exception,RuntimeException以及Error。这三类异常都是Throwable的子类。直接从Exception派生的各个异常类型就是我们刚刚提到的Checked Exception。它的一个比较特殊的地方就是强制调用方对该异常进行处理。

public void shouldNotThrowCheckedException() {
exceptionalAPI();//提示Add throws 或者surround with try.catch
}
public void exceptionalAPI() throws Exception{
throw new Exception();
}

而RuntimeException类的各个派生类则没有这种强制调用方对异常进行处理的需求。

public void shouldNotHandleExcetion(){
runtimeAPI(); //没有任何提示
}
public void runtimeAPI(){
throw new RuntimeException();
}

为什么这两种异常会有如此大的区别呢?因为RuntimeException所表示的是软件开发人员没有正确地编写代码所导致的问题,如数组访问越界等。而派生自Exception类的各个异常所表示的并不是代码本身的不足所导致的非正常状态,而是一系列应用本身也无法控制的情况。例如一个应用在尝试打开一个文件并写入的时候,该文件已经被另外一个应用打开从而无法写入。对于这些情况,Java通过Checked Exception来强制软件开发人员在编写代码的时候就考虑对这些无法避免的情况的处理,从而提高代码质量。

而Error则是一系列很难通过程序解决的问题。这些问题基本上是无法恢复的,例如内存空间不足等。在这种情况下,我们基本无法使得程序重新回到正常轨道上。因此一般情况下,我们不会对从Error类派生的各个异常进行处理。


CheckedException都是Exception及其子类(除了Runtime Exception 及其子类),必须处理, 如果不处理则报错提示。

Runtime Exception 和Error 都属于 UncheckedException。uncheckedException表示处理了程序恢复运行也没有意义,代码逻辑存在问题,或者属于系统异常,无法处理,如网络异常等。java编译器不检查这种异常。

RuntimeException可以不用处理,可以看到大多数是运行时输入在某些case下导致的,有更多的不确定性。而且Java开始的时候并没有异常处理机制,所以从兼容性到实现代价来讲就设计成这个样子了。RuntimeException是运行时异常,表示你的代码本身存在BUG.不是编译错误,所以可以运行.应该是逻辑上的错误,比如数组下标越界,等等. 一定要处理

Error处理也没有用



参考链接:http://www.cnblogs.com/loveis715/p/4596551.html


原创粉丝点击