Java异常:运行期出现的错误
1. Java异常是Java提供的用于处理程序中错误的一种机制;
2. 错误指的是程序运行期间发生的异常事件,如除零溢出、数组下标越界、读取的文件不存在....
3. Java程序的执行过程中如出现异常事件,会生成一个异常类对象,该异常对象封装了异常事件的信息并将其提交给Java运行时系统,此过程称之为抛出异常(throw exception);
4. 当Java运行时系统接收到异常对象后,会寻找能处理这一异常的代码,并把当前异常对象交给其处理,此过程称之为捕获异常(catch exception);
5. 异常的分类:J2SDK中定义了很多异常类,这些异常类对应了各种各样可能出现的异常事件,如下图
① Error:称为错误(系统错误),你处理不了,由Java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等,程序对其不做处理.
② Exception:所有异常类的父类,其子类对应了各种各样可能出现的异常事件,一般需要用户显示声明或捕获.
③RuntimeException:一类特殊的异常,如被0除、数组下标越界,其产生比较频繁,处理麻烦,如果显示的声明或捕获将会对程序可读性和运行的效率影响很大。因此由系 统自动检测并将他们交给缺省的异常处理程序(用户可不比对其处理).
6. try语句
① try{...} 语句指定了一段代码,该段代码就是一次捕获并处理例外的范围;
② 在执行过程中,该段代码可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常作相应的处理;
③ 如果没有例外产生,所有的catch代码都被忽略,不执行.
7. catch语句
① 在catch语句块中是对异常进行处理的代码,每个try语句可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象;
② 在catch中声明的异常对象(catch(someException e))封装了异常事件发生的信息,在Catch语句块中可以使用这个对象的一些方法获取这些信息.
③ getMessage()方法,用来得到有关异常事件的信息;
printStackTrace()方法,用来跟踪异常事件发生时执行堆栈的内容;
一般而言,printStackTrace()方法用得比较多,它包含了getMessage()方法的内容,跟踪异常:如果一段代码可能发生异常是由于另外一段代码异常引起的,则它会打 印两段代码的异常信息,以及出错位置.
8. finally语句
① finally语句为异常处理提供了一个统一的出口,使得在控制流程转到程序的其它部分以前,能够对程序的状态做统一的管理;
② 无论try语句指定的程序块中是否抛出异常,finally所指定的代码都要被执行;
③ 通常在finally语句中进行资源的清除工作,如:关闭打开的文件、删除临时文件、释放非内存资源.
9. Demo
Demo_1
import java.io.*; public class TestEx { public static void main(String[] args){ FileInputStream in = null; int b; try { in = new FileInputStream("myfile.txt"); b = in.read(); while(b != -1){ System.err.println((char)b); b = in.read(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ try { in.close(); System.out.println("hello"); } catch (IOException e) { e.printStackTrace(); } } } }