不需要try...catch...或throws 机制去处理的异常
扩展:错误和异常的区别(Error vs Exception)
1) java.lang.Error: Throwable的子类,用于标记严重错误。合理的应用程序不应该去try/catch这种错误。绝大多数的错误都是非正常的,就根本不该出现的。
java.lang.Exception: Throwable的子类,用于指示一种合理的程序想去catch的条件。即它仅仅是一种程序运行条件,而非严重错误,并且鼓励用户程序去catch它。
2) Error和RuntimeException 及其子类都是unchecked exceptions(不用try....catch),而所有其他的Exception类都是checked exceptions(需要try ...catch).
RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现 RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。其他(IOException等等)checked异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。
unchecked exceptions: Error和RuntimeException 及其子类都是unchecked exceptions.通常是如果一切正常的话本不该发生的异常,但是的确发生了。发生在运行期,具有不确定性,主要是由于程序的逻辑问题所引起的。比如ArrayIndexOutOfBoundException, ClassCastException等。从语言本身的角度讲,程序不该去catch这类异常,虽然能够从诸如RuntimeException这样的异常中catch并恢复,但是并不鼓励终端程序员这么做,因为完全没要必要。因为这类错误本身就是bug,应该被修复,出现此类错误时程序就应该立即停止执行。 因此,面对Errors和unchecked exceptions应该让程序自动终止执行,程序员不该做诸如try/catch这样的事情,而是应该查明原因,修改代码逻辑。
checked exceptions: 通常是从一个可以恢复的程序中抛出来的,并且最好能够从这种异常中使用程序恢复。比如FileNotFoundException, ParseException等。检查了的异常发生在编译阶段,必须要使用try…catch(或者throws)否则编译不通过。
什么是unchecked异常? 即RuntimeException(运行时异常)
不需要try...catch...或throws 机制去处理的异常
- 列举最常用的五种RuntimeException:
| int a=0; int b= 3/a; |
| Object x = new Integer(0); System.out.println((String)x); |
| int [] numbers = { 1, 2, 3 }; int sum = numbers[3]; |
IllegalArgumentException | int a = Interger.parseInt("test"); |
NullPointerExceptionexte | |
- 除了RuntimeException,其他继承自java.lang.Exception得异常统称为Checked Exception,他们有多少种呢?
除了 RuntimeException以外的,都是checked Exception
java.lang.Object 所有已实现的接口: Serializable 直接已知子类: AclNotFoundException, ActivationException, AlreadyBoundException, ApplicationException, AWTException, BackingStoreException, BadAttributeValueExpExce |