前面我们说到有关于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不存在!");
}
}
}
逻辑代码与处理代码存放在一起,使得程序员本人找不到正确的执行代码;而且用原始if处理,就要求程序员本身对例外的错误情况十分了解,对程序员的要求十分高。
那么我们怎么样去应对异常情况呢?JAVA的异常机制就给我们提供了一些方便的处理方式。假如我们使用JAVA的异常机制来处理的话可以类似如下:
try {
copyFile("d:/a.txt","e:/a.txt");
} catch (Exception e) {
e.printStackTrace();
}
上面所提到的异常,我们可以直接用try-catch
将其包起来,JAVA的异常我们可以交给try异常块给包起来,当我们遇到程序异常时我们直接交给系统处理,直接catch一下。
我们将JAVA异常机制的本质可以理解为当程序出现错误或异常时,程序能够安全退出的机制。
异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。
在Java的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类。
异常类定义中包含了该类异常的信息和对异常进行处理的方法。
所谓异常处理,就是指程序在出现问题时依然可以正确的执行完。
我们开始看我们的第一个异常对象,并分析一下异常机制是如何工作的。
public class TestException1 {
public static void main(String[] args) {
int i=1/0; //除数为0
System.out.println(i);//输出
}
}
执行结果如下所示:
我们可以看到,系统提示0不能作除数,当程序跑到异常处时会生成一个”ArithmeticException
“异常对象,然后抛给我们的JRE,再由JRE作处理将程序给停止掉,最后提示并打印相关的异常信息,让我们去想办法处理异常。
JDK 中定义了很多异常类,这些类对应了各种各样可能出现的异常事件,所有异常对象都是派生于Throwable
类的一个实例。如果内置的异常类不能够满足需要,还可以创建自己的异常类。
Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable
,Throwable下面又派生了两个子类:Error
和Exception
。Java异常类的层次结构如下所示。
对于Error来说,我们只有重启虚拟机了,这个无法处理的是不需要再去处理异常了。
而对于Exception来讲,是我们本次需要学习的异常,在这之下还分为两大类:Checked Exception
和RuntimeException
(Unchecked Exception
),需要检查的异常和不需要检查的异常(运行时会抛出,一般为逻辑错误)
此张图为异常的基本分类,比较重要,要牢记!下一篇我们来展开讲解异常的分类!
未完待续~