一.异常机制意义何在?
异常(Exception)是在我们编写程序时发生错误或故障时所出现的情况。如果没有异常处理机制,当我们编写程序时,我们需要考虑发生异常的各种情况来避免或处理异常,这就给我们程序员提出了很高的要求,也造成了很大的困扰。
我们在拷贝一个文件时,在没有异常机制的情况下,我们需要考虑各种异常情况,伪代码如下:
public class Test1 {
public static void main(String[] args) {
//将d:/a.txt复制到e:/a.txt
if("d:/a.txt"这个文件存在){
if(e盘的空间大于a.txt文件长度){
if(文件复制一半IO流断掉){
停止copy,输出:IO流出问题!
}else{
copyFile("d:/a.txt","e:/a.txt");
}
}else{
System.out.println("e盘空间不够存放a.txt!");
}
}else{
System.out.println("a.txt不存在!");
}
}
}
这样的代码有两个坏处:
1.逻辑代码和错误代码放在一起,看起来十分难受。
2.对程序员要求较高,书写一段代码需要考虑到各种异常情况。
综上所述,我们有必要引入异常处理机制来使代码清晰简单,同时减轻程序员的工作负担。
如果用Java的异常机制来处理异常,则代码如下(仅示意,不能执行):
try {
copyFile("d:/a.txt","e:/a.txt");
} catch (Exception e) {
e.printStackTrace();
}
异常处理机制的本质:当我们程序出现错误时,程序安全退出的机制。
二.异常的概念
异常(Exception)是指程序运行过程中出现的非正常现象,例如除数为零、用户输入错误、数组下标越界、需要处理的文件不存在等。
在Java中引进了很多描述和处理异常的类,我们把他叫做异常类。异常类定义中包含了该类异常的信息和对异常进行处理的方法。
异常处理就是指程序出现异常时依然可以正确的执行完。
public class Test2 {
public static void main(String[] args) {
int i=1/0; //除数为0
System.out.println(i);
}
}
运行结果 出现异常:
JAVA是采用面向对象来处理异常的,处理过程为:
1.抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。
2.处理异常: JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。
三.异常的分类
JDK中定义了很多类,其中包含异常类。所有的异常对象都是派生与Throwable类中的一个实例。如果其中的异常类不能满足需求,还可以定义属于自己的异常类。
Java对对异常分类进行了表示,不同的异常用不同的Java类来表示。所有异常的根类为java.lang.Throwable。Throwable下面又派生了两个子类:Error和Exception。Java异常类的层次结构图如图所示: