《零点起飞学Java之异常处理.pptx》由会员分享,可在线阅读,更多相关《零点起飞学Java之异常处理.pptx(16页珍藏版)》请在三一办公上搜索。
1、第7章 异 常 处 理,Java语言提供了异常机制来处理程序运行过程中可能发生的各种非正常事件。通过异常处理机制,大大提高了程序的健壮性。Java语言对各种异常进行了相关的分类,提供了处理异常的不同手段,下面会进行详细介绍。,7.1 什么是异常,异常是指在程序运行过程中出现的非正常事件。Java语言采用面向对象的方法提供了一套异常处理机制。程序运行过程中发生的所有异常都被封装成异常类,根据异常的不同特点,可以划分为不同的异常类型。Java语言的异常类通过继承关系形成一个层次关系,如图7.1所示。,7.1 什么是异常,从异常类层次结构图可以看出,Thorowable类位于异常层次结构的最顶层。所
2、有异常子类都继承了Throwable类,都是可抛出的。从顶层往下,Thorowable类包含两个子类:Exception和Error。Error类被认为是不能恢复的严重错误,如系统内部错误和资源耗尽错误等。这类错误通常用户程序不能处理,交由Java虚拟机进行处理。Exception类定义的异常是程序可以进行处理的,本章下面所说的异常均指此类异常。根据具体特点,Exception异常又分为继承自RuntimeException类的异常和非继承自RuntimeException类的异常。,7.2 异常的类型,Java程序中处理的异常主要包括运行时异常和可控异常。运行时异常是扩展了RuntimeEx
3、ception类的异常类,在编写程序时不需要特别处理,在程序执行时有可能发生。可控异常是编写程序时即可预见的异常,此类异常需要程序对其做出处理,或进行捕获处理,或抛出交由上一层代码处理。关于异常捕获和抛出的知识在下面章节会详细介绍。对这两类异常,下面分别进行举例说明。,7.2.1 运行时异常,Java语言中系统定义的常见运行时异常有NullPointerException、ArithmeticException、ArrayStoreException、BufferOverflowException、BufferUnderflowException、ClassCastException、Inde
4、xOutOfBoundsException等。,7.2.2 可控异常,Java语言中系统定义的可控异常有ClassNotFoundException、IOException、DataFormatException、Naming-Exception等。,7.3 处理异常,对于程序中可能发生的各种异常,往往需要对其进行相关的处理,从而增加程序的健壮性。在Java语言中,对异常的处理包括捕获异常、向外抛出异常。另外,用户还可以定义自己的异常类,对异常信息进行重新包装。对于这些内容,下面分别进行介绍。,7.3.1 捕获异常,对于程序中出现的异常,可以利用trycatch语句进行捕获。在编写程序过程中,
5、有些操作无论是否发生异常,都应该进行处理(如关闭数据库连接),这样的处理代码可以放在finally代码块中。下面对trycatch语句和finally语句分别进行讲解。,1trycatch语句,在Java语言中,用trycatch语句来捕获异常,语法格式如图7.2所示。,1trycatch语句,trycatch中可以具有多条catch语句,分别用于捕获不同类型的异常。注意:由于NullPointerException异常和ArithmeticException异常都是运行时异常,所以即使不使用trycatch语句捕获,程序也能编译通过。也就是说,可控异常必须要捕获或抛出,运行时异常可以捕获或抛
6、出,也可以不做任何处理。,2finally语句,finally语句用于无论是否发生异常都要执行的操作,需要与trycatch语句配合使用。finally语句语法格式如图7.3所示。,7.3.2 抛出异常,对于方法中可能出现的异常,如果不想在方法中进行捕获,可以在声明时利用throws语句进行抛出。在方法体中,可以使用throw语句抛出继承了throwable类的子类。抛出的异常由上一层代码进行处理。下面对throws和throw语句分别进行讲解。,1throws语句,throws语句用于在方法声明时抛出方法体中可能存在的异常,语法格式如图7.4所示。其中,参数exceptionList表示可能
7、存在的异常列表,都应该是throwable类的子类,多个类之间用“,”号隔开。注意:在示例7-5中,throwException方法中的代码“s.getBytes();”会抛出IOException运行时异常。由于在方法定义时声明了抛出IOException异常,所以在方法体中不需要再对此异常进行捕获处理。,2throw语句,throw语句用于在方法体中抛出异常,语法格式如图7.5所示。其中,参数exception应该是throwable类的子类,不能为多个。,7.3.3 自定义异常,尽管Java语言定义了许多异常类,用户仍可以通过继承Exception类或RuntimeException类来自定义异常。自定义异常的语法格式如图7.6所示。,7.4 小 结,本章介绍了Java语言中的异常处理机制,包括异常的分类、捕获异常、抛出异常及自定义异常等知识。本章最后给出了一个完整的实例。其中,异常的捕获和抛出是本章的难点和重点,也是实际编程过程中经常需要进行的操作。第8章将介绍Java语言中有关多线程编程方面的内容。,