Java异常:选择Checked Exception还是Unchecked Exception?

来源:互联网 发布:淘宝长款半身裙 编辑:程序博客网 时间:2024/06/06 05:16

Java包含两种异常:checked异常unchecked异常。C#只有unchecked异常。checked和unchecked异常之间的区别是:

运行时异常在运行期间才能被检查出来,Checked在编译时就能确定,一般运行期异常不需要处理,Checked异常需要自己处理

  1. Checked异常必须被显式地捕获或者传递,如Basic try-catch-finally Exception Handling一文中所说。而unchecked异常则可以不必捕获或抛出。
  2. Checked异常继承java.lang.Exception类。Unchecked异常继承自java.lang.RuntimeException类。

有许多支持或者反对二者甚至是否应该使用checked异常的争论。本文将讨论一些常见的观点。开始之前,先澄清一个问题:

Checked和unchecked异常从功能的角度来讲是等价的。可以用checked异常实现的功能必然也可以用unchecked异常实现,反之亦然。

选择checked异常还是unchecked异常是个人习惯或者组织规定问题。并不存在谁比谁强大的问题。



Java中所有异常或者错误都继承Throwable,我们把它分为三类吧:
1.Error:所有都继承自Error,表示致命的错误,比如内存不够,字节码不合法等。
2.
Exception:这个属于应用程序级别的异常,这类异常必须捕捉。
3.RuntimeException:奇怪RuntimeException继承了Exception,而不直接继Error,  这个表示系统异常,比较严重。

Error我们很少遇到,但并不说Error就一定非常致命,举个例子,NoSuchMethodError表示没有这个方法,你调用的方法不存在,你一定觉得奇怪,不存在怎么编译的过去呀?很简单的,你先编译好一个被调用的类A,给一个方法。然后在你的程序调用它,编译没问题,运行也没问题。现在再把A类中这个方法去掉,重新编译一遍,你再运行你的程序就知道错误怎么回事了。
Exception不用说,我们要自己捕捉。
RuntimeException可以说见的最多了,下面我们说明一下常见的RuntimeException:

NullPointerException:见的最多了,其实很简单,一般都在null对象上调用方法了。

ArrayIndexOutOfBoundsException:数组越界
比如 int[] a=new int[3]; int b=a[3];

ClassCastException:类型转换错误
比如 Object obj=new Object(); String s=(String)obj;
0 0