1.7 java中的异常处理
1.7.1 有一个父类java.lang.Throwable类,主要有两个子类:
Error错误类和Exception异常类;
Error类:
一般是程序无法处理的错误,JVM自身故障或者执行任务时出错,与开发者无关;例如Virtual Machine Error、OutOfMemoryError;
Exception类:
主要分为CheckedException和RuntimeException
CheckedException又称编译期异常,一般强制要求程序员处理;如IOException
RuntimeException运行期异常,对于这种异常处理方式可以抛给虚拟机处理,也可以自己try…catch捕获处理;如ClassNotFoundException、ArrayIndexOutOfBoundsException、NullPointerException等;
1.7.2 这些类在Throwable中定义了共性方法:
public String getMessage: 返回异常详细信息;
public String toString: 返回异常发生时的简要描述;
public String getLocalizedMessage:返回异常的本地化信息,没有重写的话和getMessge返回结果相同;
public void printStackTrace:打印异常信息在控制台
1.7.3 关于try…catch
try(){
…
}catch(…){
…
}catch(…){
…
}finally{
…
}
try后面{}中放可能出现异常的代码;
catch后的()中定义接收异常的变量,可以使用多态来接收子父类异常,{}放异常处理逻辑;
另外一个try可以接多个catch,但异常发生后,会从上到下开始匹配,只与一个catch匹配;
另外多个catch后定义的异常类型如果存在子父类关系,将子类放在父类前面,否则会出现子类异常的catch无效(子类异常被前面的父类异常变量接收);
1.7.4还可以添加finally{}代码段,{}中放无论是否发生异常都会执行的代码,在以下情况下例外:
- finally代码段中抛出异常;
- try…catch中调用了return结束了方法,或者exit()退出了程序;
- 所在线程死亡;
- CPU关闭;