目录
1. 异常(Exception)的概念
异常是指程序运行过程中出现的非正常现象,例如除数为0、需要处理的文件不存在、数组下标越界等。
在Java的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类 ,异常类定义中包含了该类异常的信息和对异常进行处理的方法。意思是异常类本身就能解决异常,就不用程序员自己去处理。
Java是采用面向对象的方式来处理异常的,处理过程:
抛出异常(throws):在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。
捕获异常(try...catch...):JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的掉用栈中查找,从生成异常的方法回溯,直到找到相应的异常处理代码为止。
2. 异常分类
异常类有很多,但都直接或间接继承了java.lang.Throwable类,即Throwable是根类,其下面又派生了两个子类:Error和Exception。Java异常类的层次结构如图所示:
Error
Error是程序无法处理的异常,表示运行应用程序中较严重的问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM (Java 虚拟机)出现的问题。即电脑或服务器故障之类的问题,是我们也无法处理的问题。
Error表明系统JVM已经处于不可恢复的崩溃状态中。
Error与Exception的区别
Exception:我开车走在路上,一头猪冲在路中间,我刹车然后绕路走。问题自己就可以解决,这叫异常。
Error:我开车走在路上,发动机突然坏了,我停车,就算是会修车,如果零件已经彻底坏了,就只能换零件了,这叫错误。
Exception
Exception是程序本身能够处理的异常。
Exception类是所有异常类对父类,其子类对应了各种各样可能出现的异常事件。通常Java的异常可分为:
1. RuntimeException 运行时异常
2. CheckedException 已检查异常
RuntimeException 运行时异常:如被0除、数组下标越界、空指针等等,但程序时可以运行的。
CheckedException 已检查异常:编译时就必须处理的异常,否则就无法运行
CheckedException异常的处理方式有两种:
1. try/catch
2. throws