异常处理
异常分类
Java语言按照错误严重性,从throwale根类衍生出Error和Exception两大派系
Error(错误):
- 程序在执行过程中所遇到的硬件或操作系统的错误。错误对程序而言是致命的,将导致程序无法运行。
- 常见的错误有内存溢出,jvm虚拟机自身的非正常运行,calss文件没有主方法。
- 程序本生是不能处理错误的,只能依靠外界干预。Error是系统内部的错误,由jvm抛出,交给系统来处理。
EXCEPTION(异常):
- 是程序正常运行中,可以预料的意外情况。
- 比如数据库连接中断,空指针,数组下标越界。
- 异常出现可以导致程序非正常终止,也可以预先检测,被捕获处理掉,使程序继续运行。
EXCEPTION(异常)按照性质,又分为编译异常(可检测)和运行时异常(不可检测)。
- 编译时异常
- 又叫可检查异常,通常时由语法错误和环境因素(外部资源)造成的异常。
- 比如输入输出异常IOException,数据库操作SQLException。
- 其特点是Java语言强制要求捕获和处理所有非运行时异常。通过行为规范,强化程序的健壮性和安全性。
- 运行时异常
- 又叫不检查异常RuntimeException,这些异常一般是由程序逻辑错误引起的,即语义错误。
- 比如算术异常,空指针异常NullPointerException,下标越界IndexOutOfBoundsException。运行时异常应该在程序测试期间被暴露出来,由程序员去调试,而避免捕获。
- java语言处理运行时错误有三种方式:
- 程序不能处理的错误
- 程序应该避免而可以不去捕获的运行时异常
- 必须捕获的非运行时异常。
抛出异常
try{
可能发生异常的代码块
}catch(可以捕获的异常1){
处理异常1的代码
}catch(可以捕获的异常2){
处理异常2的代码
}finally{
处理完所有异常后一定会执行的代码。
在这里注意的事。如果在这里没有出现异常,最终也会执行这行代码
}
注意:
finally不会被执行的情况
- 在finally语句块中发生了异常
- 在前面的代码中使用了System.exit()退出程序
- 程序所在的线程死亡
- 关闭CPU