1.异常分类
检查性异常:
是指程序员无法预见的异常,是用户操纵可能出现的,比如打开一个不存在的文件,这种异常代码层次就应该预知并进行处理。
运行时异常
运行时异常可能在代码编译阶段被检查通过,比如空指针和数组越界,这些运行时就会出错。
错误
错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出
时,一个错误就发生了,它们在编译也检查不到的。
1.1 Error
是由java虚拟机抛出的异常,大多数错误和代码运行时无关,比如java虚拟机运行错误。
这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
1.2 Exception
Exception异常是最大的异常,下面的RuntimeException (运行时异常)
运行时异常又细分。
ArrayIndexOutOfBoundsException (数组下标越界)
NullPointerException (空指针异常)
ArithmeticException (算术异常)
MissingResourceException (丢失资源)
ClassNotFoundException (找不到类)
这些异常是在代码检查阶段不会被检查的,在运行的可能会发生错误。可以捕获也可以不捕获。
检查性异常IOException 、 SQLException 等以及用户自定义的 Exception 异常,一般情况下不自定义检
查异常。可以捕获或者抛出,不然编译不通过
Error 和 Exception 的区别: Error 通常是灾难性的致命的错误,是程序无法控制和
处理的,当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程; Exception 通常情况下是可
以被程序处理的,并且在程序中应该尽可能的去处理这些异常。
2.Java异常处理机制
2.1 抛出异常
遇到的异常,向上一级进行抛出,在最上级进行统一处理。
public static void main(String[] args) throws Exception {}
2.2 异常捕获
try 、 catch 、 finally 、 throw 、 throws
try {
}catch (Exception e){
}finally{
}
对于最上级,throws 无法再抛出异常,需要对异常进行统一的捕获处理。
对于可能发生异常的代码放在try
对于捕获到的异常再catch处理
对于一些必须要关闭的资源,需要在finally进行处理,比如io关闭连接等
2.3 try, catch,finally ,return 执行顺序
1.执行try,catch , 给返回值赋值
2.执行finally
3.return
2.4 自定义异常处理
自定义异常,自己创建类,继承Exception 即可
class MyException extends Exception {
}
try {
}catch (MyException e){
}finally{
}