编辑: 向日葵8AS | 2014-06-17 |
为了在程序执行过程中发生错误时能正常运行,可以使用Java提供的异常处理机制捕获可能发生的异常,对异常进行处理并使程序能正常运行. 通过阅读本章,您可以: ( 了解异常的概念 ( 了解异常的分类 ( 掌握如何获取异常信息 ( 掌握如何处理异常 ( 了解如何抛出异常 ( 了解自定义异常 ( 了解异常的使用原则 11.1 异常概述视频讲解:光盘\TM\lx\11\异常概述.exe 假设一辆轿车发生了故障,可能是某个零件发生了问题,也可能是没有油了.如果是由于零件问题,只需要更换零件就可以解决;
如果是没有油了,只需要加满油就可以正常行驶了.程序中的异常与此类似,就对程序中可能发生异常的语句进行处理,使程序能够正常执行. 在程序开发过程中,可能存在各种错误,有些错误是可以避免的,而有些错误却是意想不到的,在Java中把这些可能发生的错误称为异常.图11.1说明了异常类的继承关系. 图11.1 异常类的继承关系图 从图11.1中可以看出,Throwable类是所有异常类的超类,该类的两个直接子类是Error和Exception.其中,Error及其子类用于指示合理的应用程序不应该试图捕获的严重问题,Exception及其子类给出了合理的应用程序需要捕获的异常. 11.2 异常的分类 视频讲解:光盘\TM\lx\11\异常的分类.exe 在Java中可以捕获的异常(即Exception类的子类)分为可控式异常和运行时异常两种类型. 11.2.1 可控式异常 在Java中把那些可以预知的错误,例如从文件中读取数据、对数据库进行操作等,在程序编译时就能对程序中可能存在的错误进行处理,并给出具体的错误信息,我们把这些错误称为可控式异常.表11.1中列出了常用的可控式异常及说明. 表11.1 常用可控式异常及说明 异常说明IOException 当发生某种I/O异常时,抛出此异常 SQLException 提供关于数据库访问错误或其他错误信息的异常 ClassNotFoundException 类没有找到异常 NoSuchFieldException 类不包含指定名称的字段时产生的信号 NoSuchMethodException 无法找到某一特定方法时,抛出该异常 【例11.1】 创建项目01,在项目中创建Example_01类,在该类中加载一个不存在的类,观察发生的异常.(实例位置:光盘\TM\sl\11\1) public class Example_01 { private int num=10;
成员变量 public int getNum(成员方法 return num;
返回成员变量的值 } public void setNum(int num)成员方法 this.num = num;
设置成员变量的值 } public Example_01(类的构造方法 try { Class.forName( com.mingrisoft.Test );
//装载com.mingrisoft包中的Test类}catch (ClassNotFoundException e) { e.printStackTrace();
} System.out.println( 测试.在控制台输出 测试. } public static void main(String[] args) { Example_01 exam=new Example_01();
//创建类的实例 exam.setNum(888)调用setNum()方法设置成员变量num的值为888 System.out.println(exam.getNum(调用getNum()方法输出成员变量的值888 } } 运行结果如图11.2所示. 图11.2 ClassNotFoundException异常 11.2.2 运行时异常 在Java中有些错误是不能被编译器检测到的,例如,在进行除法运算时,除数为零;
试图把一个不是由数字组成的字符串使用Integer类的parseInt()方法转换为整数等,Java的编译器是检测不到的,因而能够正常编译,但是在运行时就会发生异常,我们把这些异常称为运行时异常.表11.2列出了常用的运行时异常及说明. 表11.2 常用的运行时异常及说明 方法说明IndexOutOfBoundsException 指示某集合或数组的索引值超出范围时抛出该异常 NullPointerException 当应用程序试图在需要对象的地方使用 null 时,抛出该异常 ArithmeticException 当出现异常的运算条件时,抛出此异常 IllegalArgumentException 抛出的异常表明向方法传递了一个不合法或不正确的参数 ClassCastException 当试图将对象强制转换为不是实例的子类时,抛出该异常 【例11.2】 通过Integer类的实例创建Object对象o,观察将Object对象o强制转换为字符串时发生的异常. Object o = new Integer(0)通过Integer类的实例创建Object对象o System.out.println((String)o)将Object对象o强制转换为字符串时出错 【例11.3】 在项目中创建Example_02类,在该类中创建一个数组,然后使用超出数组下标范围的值访问数组中的元素,观察发生的异常.(实例位置:光盘\TM\sl\11\2) int[] number={ 100, 80, 50, 70, 20, 60};