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

1、前言

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

2、分析学习

软件程序在运行时,常常会遇到各类各样的问题,咱们将其称之为异常: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处理,就要求程序员自己对例外的错误状况十分了解,对程序员的要求十分高。web

那么咱们怎么样去应对异常状况呢?JAVA的异常机制就给咱们提供了一些方便的处理方式。假如咱们使用JAVA的异常机制来处理的话能够相似以下:数组

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

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

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

3、处理方式

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

在Java的异常处理机制中,引进了不少用来描述和处理异常的类,称为异常类
1
异常类定义中包含了该类异常的信息和对异常进行处理的方法。
2
所谓异常处理,就是指程序在出现问题时依然能够正确的执行完。
咱们开始看咱们的第一个异常对象,并分析一下异常机制是如何工做的。spa

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

执行结果以下所示:
3
咱们能够看到,系统提示0不能做除数,当程序跑到异常处时会生成一个”ArithmeticException“异常对象,而后抛给咱们的JRE,再由JRE做处理将程序给中止掉,最后提示并打印相关的异常信息,让咱们去想办法处理异常。.net

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

4、异常分类

JDK 中定义了不少异常类,这些类对应了各类各样可能出现的异常事件,全部异常对象都是派生于Throwable类的一个实例。若是内置的异常类不可以知足须要,还能够建立本身的异常类。3d

Java对异常进行了分类,不一样类型的异常分别用不一样的Java类表示,全部异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:ErrorException。Java异常类的层次结构以下所示。
11


对于Error来讲,咱们只有重启虚拟机了,这个没法处理的是不须要再去处理异常了。

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

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

未完待续~