异常处理
一、异常的概念
**异常(Exception)**又称为例外,差错,违例等,是特殊的运行错误对象,对应着Java语言特定的运行错误处理机制。由于Java是在网络 环境中运行的,所以安全问题成为首先考虑的重要因素之一。
1.Java中的异常
捕获错误的最好时期是在编译期,最好在试图运行程序前。然而并非所有的错误都可以在编译期内被发现。有些问题必须在运行时被解决,例外是在程序运行过程中发生的异常事件,比如除0溢出,数组越界,找不到文件等,这些问题的出现将阻止程序的正常运行,为了增强代码的健壮性,程序设计时,必须考虑到可能发生的异常事件并做出相应的反应。
在一个方法的运行过程中,如果发生了异常,则这个方法生产代表该异常的一个对象,并把它交给运行时系统,运行时找到相应的代码来处理这一异常。
**抛出(throw)异常**:生成异常对象并把它提交给运行系统时的过程。
**捕获(catch)异常**:运行时系统在方法调用栈中查找,从生成异常的方法开始回溯,直到找到包含相应异常处理的方法为止。
2.异常类
Java中定义了很多异常类,每种异常类代表了一种运行错误。throwable类是所有异常类的父类。它派生了两个子类:*Error类* 和 *Exception类*。
Error:JVM系统内部错误,资源耗尽等严重情况,由系统保留
Exception:其它编程错误或偶然的外在因素导致的一般性问题,如对负数开平方根,除0,数组越界,空指针访问,文件不存在,网络连接中断等。
我们 一般所说的异常类都是指Exception类。
Exception类从父类throwable类那里还继承了若干方法,常用的方法有:
**public void printStackTrace()**:该方法没有返回值,完成一个打印操作,在当前的标准输出上打印输出当前异常对象调用堆栈的先后轨迹,即程序先后调用并执行了哪些对象或类的哪些方法,使得运行过程中产生了这个异常对象。
3.系统定义的异常
JDK中已经定义了若干Exception的子类。分为RuntimeExcepton和非RuntimeExcepton两大类。
4.用户自定义的异常
用户自定义的异常是Exception派生出来的子类。
抛出和捕获异常
Java异常处理机制的步骤
- 抛出异常
- 捕获异常
- 如果Java运行时找不到捕获异常的方法,则运行时系统将终止,Java程序也将退出
1.抛出异常
Java程序在运行中遇到了可识别的错误,就会产生一个相对应的错误对象,这个对象会被提交给运行时系统,这个过程称为抛出异常。抛出异常的方法有两种:
- 系统自动抛出异常
- 语句抛出异常 。用户自定义的异常类无法依靠系统自动抛出异常。所以用throw语句来抛出异常。语法格式:
throw 异常对象
注意:
该throw语句应放在一定的条件控制语句中,比如if语句
如果含有该throw语句的方法或调用的其它类有异常抛出时,应该在方法的头定义中加上throw 对象名列表
2.捕获异常
当一个异常被抛出的时候,应该有专门的语句来接受这个异常对象,这个过程就是捕获异常。
捕获异常的语句为
try{
语句块;(可能产生异常的语句块)
}斜体样式
catch(异常类名 异常对象){
处理异常的语句块;
···
}
finally{
异常处理语句块;
···
}
catch语句可以有好多个,但是至少有一个catch语句或finally语句
3.finally语句
无论代码在try语句中是否发生了异常,finally语句都会被执行。
finally语句做一些清理资源的工作。
注意:
子类抛出的异常只能是父类异常的同类或子类