一、异常定义
在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常。异常是发生在程序执行过程中阻碍程序正常执行的错误事件;比如打开的文件不存在、网络连接中断、操作数组越界等都会导致出现异常。
二、Java异常体系
Throwable类是整个异常体系类的父级类,整个类有两个直接子类java.lang.Error和java.lang.Exception.
Error表示系统致命错误,程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些错误发生时,Java虚拟机只能终止线程。
Exception类,也就是通常所说的“异常”。主要指编码、环境、用户操作输入出现问题.
Exception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。
常见的5种RuntimeExecption
ClassCastException(类转换异常)
IndexOutOfBoundsException(数组越界)
NullPointerException(空指针)
ArrayStoreException(数据存储异常,操作数组时类型不一致)
还有IO操作的BufferOverflowException异常
注:异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。
通常,Java的异常(包括Exception和Error)分为可查的异常(checked exceptions)和不可查的异常(unchecked exceptions)。
检查性异常和非检查性异常最主要的区别在于其处理异常的方式:检查性异常必须使用try catch或者throws等关键字进行处理,否则编译器会报错;非检查性异常一般是程序代码写的不够严谨而导致的问题,可以通过修改代码来规避。
三、Java异常处理机制
问:Java中哪些异常必须声明并捕获,否则产生编译错误?
可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。也就是说,非RuntimeException异常类或者其子类的的异常都要声明捕捉。只有RuntimeException 或者是其子类的异常是不需要进行声明捕捉的。
在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。
捕获异常语句:try、catch 和 finally
在Java中,异常通过try-catch语句捕获。其一般语法形式为:
try {
// 可能会发生异常的程序代码
} catch (Type1 id1){
// 捕获并处置try抛出的异常类型Type1
}
catch (Type2 id2){
//捕获并处置try抛出的异常类型Type2
} finally{
//一定会被执行的代码
}
注:finally不是必须有。try,catch,finally的执行顺序需要特别注意!!!切记!