当前位置:文档之家› 第九章Java异常处理

第九章Java异常处理

‫ ‏‬Java主要提供两种处理异常的机制: ‫( ‏‬1)捕获异常。在Java程序执行过程中如果出现了异常事件,就会
生成一个Exception类的异常对象。生成的异常对象将传递给Java运 行时系统,这一异常的产生和提交过程称为抛出异常。当Java运行时 系统得到一个异常对象时,它将会寻找处理这一异常的代码。找到能 够处理这种类型的异常的方法后,运行时系统把当前异常对象交给这 个方法进行处理,这一过程称为捕获(catch)异常。这是积极的异 常处理机制。如果Java运行时系统找不到可以捕获异常的方法,则运 行时系统将终止,相应地Java程序也将退出。 ‫( ‏‬2)抛出异常。当Java程序运行时系统得到一个异常对象时,如果 一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明 抛出(throws)异常。这是一种消极的异常处理机制。
9.2异常类
‫ ‏‬9.2.1 异常类的层次和主要子类 ‫ ‏‬在Java语言中,任何异常对象都是
ng.Throwable类或其子类的对象。 Throwable类是Java异常类体系中的根类, 它有两个子类:一个是Error类,另一个是 Exception类。Error类是程序员没有办法处 理的Java内部的错误,而Exception类是我 们真正关心并尽可能加以处理的。
9.2.2 异常类的构造函数和方法
‫ ‏‬2.Exception类的常用方法 ‫( ‏‬1)public String getMessage():返回描
述异常对象的详细消息的字符串,该字符 串是在构造方法中指定的参数。(2) public void printStackTrace(PrintStream s): 将此异常对象的堆栈使用轨迹输出到指定 的输出流。 (3)public String toString(): 返回描述异常类信息的字符串。
‫‏‬
at Division.main(Division.java:11)
‫ ‏‬程序说明:
‫ ‏‬从本程序的运行结果来看,程序产生了ArithmeticException,是由除数为0导 致的。由于程序没有处理除数为0的异常,程序只运行到异常发生的语句 “div=i/j;”,系统提示异常信息后,终止了程序运行。
第九章 Java异常处理
第九章 Java异常处理
技能目标: • 通过本章学习,了解异常处理的目的,了解异常类和异常
处理机制,掌握什么情况会引发异常,以及异常发生时怎 样进行处理,最终能把本章知识与实际应用结合开发应用 程序。 知识目标: • 理解异常的基本概念; • 掌握异常类的层次关系; • 了解异常处理机制; • 掌握捕获并处理异常的常用方法; • 掌握自定义异常的方法。 任务:完善教务管理系统,根据课程代码输出课程名称,输 出各学期平均课时等信息
‫‏‬
System.out.println(" a["+i+"]="+a[i]);
‫}‏‬
‫}‏‬
9.1.1异常基本概念
‫ ‏‬程序运行结果: ‫ ‏‬a[0]=1 ‫ ‏‬a[1]=2 ‫ ‏‬a[2]=3 ‫ ‏‬a[3]=4 ‫ ‏‬a[4]=5 ‫ ‏‬Exception in thread "main" ng.ArrayIndexOutOfBoundsException: 5 ‫ ‏‬at Division.main(Division.java:13) ‫ ‏‬程序说明: ‫ ‏‬程序运行时,循环的前5次正常输出了5个数,但第6次进入循环并试图输出
9.1异常处理概述
• Java语言中采用了异常处理机制,使得程 序可将错误处理的控制流从正常进行的控 制流中分离开,使我们不用再检查一个特 定的错误,并在程序的多处地方对其进行 控制。此外,也不需要在方法调用的时候 检查错误,而只需要在异常控制语句处理 错误。并且Java采用异常处理机制后,使 得程序更加稳定、健壮。
• Exception异常类,定义了程序中可能遇到的轻微 的错误条件,是可预测并可恢复的问题,可以通 过编写代码来处理并继续执行程序。
9.1.1异常基本概念
‫ ‏‬例9-1 除数为0产生算术运算异常。
‫ ‏‬public class Division {
‫ ‏‬public static void main(String args[]) {
9.2.1 异常类的层次和主要子类

• Java异常处理的层次结构如图所示。
Throwable
Error
Exception
IOException
...
RuntimeException
9.2.1 异常类的层次和主要子类
• 在Exception的子类中,RuntimeException 类又有许多子类,这种异常是在程序运行过 程中产生的异常,如ArithmeticException就 是RuntimeException的子类,如图所示。
9.3.1 try-catch-finally语句
‫ ‏‬1.try-catch ‫ ‏‬Java使用try-catch-finally语句处理异常,其中核心部分是try-catch。
try和catch这两个关键字必须同时使用,catch语句紧跟在try语句的后 面。使用try-catch语句处理异常的格式为: ‫ ‏‬try ‫{‏‬ ‫ ‏‬可能产生异常的代码块 ‫}‏‬ ‫ ‏‬catch(异常类 异常对象) ‫{‏‬ ‫ ‏‬异常处理代码块 ‫}‏‬
9.2.1 异常类的层次和主要子类
• 根据Java编译器是否检查异常处理情况, 可将Exception类分为运行时异常 (RuntimeException)和非运行时异常。
9.2.1 异常类的层次和主要子类
‫ ‏‬1. 运行时异常 ‫ ‏‬运行时异常是指由程序本身错误引发的异常,这类异常程
序设计时大多可以避免。运行时的异常类就是 RuntimeException及其子类。常用的运行时异常类有: ‫( ‏‬1)ArithmeticException:算术运算异常。当进行整数 除法或取余运算时,如果除数为0,则产生 ArithmeticException异常。 ‫( ‏‬2)ArrayIndexOutOfBoundsException:数组下标越界 异常。当访问数组元素时,如果下标越界,则产生 ArrayIndexOutOfBoundsException异常。 ‫( ‏‬3)NullPointerException:空指针异常。当一个数组变 量赋值为空引用(null)时,如果对该数组中的元素进行 操作,则产生NullPointerException。
9.1.1异常基本概念
• 在Java语言包中,提供了许多处理错误和异常的 类,主要分为两大部分:错误类Error和异常类 Exception。
• Error错误类,定义了被认为是不可恢复的严重错 误条件。这样的错误超出了程序的可控范围,大 多数与程序本身的操作无关。在大多数情况下, 当遇到这样的错误时,建议让该程序中断运行。
‫‏‬
int i=2,j=0,div;
‫‏‬
div=i/j;
‫‏‬
System.out.println(i+"/"+j+"="+div);
‫}‏‬
‫}‏‬
‫ ‏‬程序运行结果:
‫ ‏‬Exception in thread "main" ng.ArithmeticException: / by zero
• 程序运行所导致的异常发生后,由Java语言提供的异常处 理机制处理。Java的异常处理机制包括异常类体系、异常 处理的try语句、抛出自定义异常对象的throw语句、声明 方法抛出异常的throws语句。这些功能使得程序不仅能够 捕获并处理异常,还能够主动抛出异常,也能够将异常向 调用传递。
9.1.2异常处理机制
9.1.2异常处理机制
• Java语言是面向对象的语言,它对于异常的处理采用的是 面向对象的思想。它将各种异常划分为若干个异常类。如 果程序在执行过程中出现了异常,就会生成一个异常对象。 这个对象有可能由正运行的方法生成,也可能由Java虚拟 机生成,其中包含一些信息指时异常事件的类型以及当异 常发生时程序的运行状态等。
9.1.1异常基本概念
• 所谓异常,就是程序在运行过程中出现的错误、非正常终 止等非正常情况。产生异常的原因很多,如:系统资源耗 尽、数组下标越界、被除数为零、空指针访问、试图读取 的文件不存在、网络连接中断等。Java中提供的异常处理 是用来解决程序中当某种非正常情况发生时如何处理的一 种机制。
9.2.2 异常类的构造函数和方法
‫ ‏‬1.Exception类的构造函数 ‫( ‏‬1)public Exception():构造一个没有详细信息的新异
常。 ‫( ‏‬2)public Exception(String message):构造带指定详
细消息的新异常。当异常被捕获时,可以从信息当中得知 异常发生的原因。 ‫( ‏‬3)public Exception(String message,Throwable cause):构造带指定详细信息和原因的新异常。 ‫( ‏‬4)public Exception(Throwable cause):根据指定的原 因和 (cause==null ? null : cause.toString()) 的详细消息构 造新异常(它通常包含 cause 的类和详细消息)。
• Java把程序运行过程中可能遇到的错误分为两类,一类是 非致命性的,通过有效的处理后,程序还能继续执行,这 类错误称作异常,如打开一个文件时,发现文件不存在, 或操作数超出数据范围;另一类是致命性的,即程序遇到 了导致程序无法运行的问题,而且程序本身不能处理,只 能依靠外界干预,否则一直处于非正常状态,不能简单地 恢复执行,这就是错误,比如程序运行过程中内存溢出、 虚拟机错误等。
相关主题