【JAVA】异常捕捉机制(1)—异常(Exception)的概念与分类

一、前言

前面我们说到有关于API的学习,但是软件程序在运行过程中并不是会非常完美的,比如当我们写某个模块,用户的输入不一定符合要求,程序可能不存在或者是文件格式不对等等。所以接下来我们将要学习java的异常捕捉机制

二、分析学习

软件程序在运行时,经常会遇到各种各样的问题,我们将其称之为异常:Exception,也就是例外的意思。那么我们怎么样才能使编写的程序安全的退出而不至于程序崩溃呢?我们先来看看用if语句处理程序的原始方案。

public class TestException0 {
    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. 程序员要考虑的例外情况很复杂

逻辑代码与处理代码存放在一起,使得程序员本人找不到正确的执行代码;而且用原始if处理,就要求程序员本身对例外的错误情况十分了解,对程序员的要求十分高。

那么我们怎么样去应对异常情况呢?JAVA的异常机制就给我们提供了一些方便的处理方式。假如我们使用JAVA的异常机制来处理的话可以类似如下:

try {
    copyFile("d:/a.txt","e:/a.txt");
} catch (Exception e) {
    e.printStackTrace();
}
异常机制的本质

上面所提到的异常,我们可以直接用try-catch将其包起来,JAVA的异常我们可以交给try异常块给包起来,当我们遇到程序异常时我们直接交给系统处理,直接catch一下。

我们将JAVA异常机制的本质可以理解为当程序出现错误或异常时,程序能够安全退出的机制。

三、处理方式

异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。

在Java的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类
【JAVA】异常捕捉机制(1)—异常(Exception)的概念与分类_第1张图片
异常类定义中包含了该类异常的信息和对异常进行处理的方法。
【JAVA】异常捕捉机制(1)—异常(Exception)的概念与分类_第2张图片
所谓异常处理,就是指程序在出现问题时依然可以正确的执行完。
我们开始看我们的第一个异常对象,并分析一下异常机制是如何工作的。

异常分析(除数为0)
public class TestException1 {
    public static void main(String[] args) {
        int i=1/0;  //除数为0
        System.out.println(i);//输出
    }
}

执行结果如下所示:
【JAVA】异常捕捉机制(1)—异常(Exception)的概念与分类_第3张图片
我们可以看到,系统提示0不能作除数,当程序跑到异常处时会生成一个”ArithmeticException“异常对象,然后抛给我们的JRE,再由JRE作处理将程序给停止掉,最后提示并打印相关的异常信息,让我们去想办法处理异常。

Java是采用面向对象的方式来处理异常的。处理过程:
  1. 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。
  2. 捕获异常 :JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。

四、异常分类

JDK 中定义了很多异常类,这些类对应了各种各样可能出现的异常事件,所有异常对象都是派生于Throwable类的一个实例。如果内置的异常类不能够满足需要,还可以创建自己的异常类。

Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:ErrorException。Java异常类的层次结构如下所示。
【JAVA】异常捕捉机制(1)—异常(Exception)的概念与分类_第4张图片


对于Error来说,我们只有重启虚拟机了,这个无法处理的是不需要再去处理异常了。

而对于Exception来讲,是我们本次需要学习的异常,在这之下还分为两大类:Checked ExceptionRuntimeExceptionUnchecked Exception),需要检查的异常和不需要检查的异常(运行时会抛出,一般为逻辑错误)

此张图为异常的基本分类,比较重要,要牢记!下一篇我们来展开讲解异常的分类!

未完待续~

你可能感兴趣的:(java)