内蒙古科技大学 教 案 第六章异常处理 本章学习重要目标: 掌握异常类结构与组成 掌握异常处理机制 掌握抛出异常和捕获异常的方法 掌握多异常处理的方法 §6.1引言 生活中,我们会根据不同的异常进行相应的处理,而不会就此中止我们的生活。 在程序运行过程中,如果环境检测出一个不可能执行的操作,就会出现运行时错误 (runtime error),叫做异常。如果异常没有被处理,那么程序将会非正常终止。 在理想状态下,在程序中用户输入数据的格式永远都是正确的,程序选择打开的 件也 一定存在。然而现实世界却充满了带有问题的代码 例如:ArrayIndexOutOfBoundsException数组下标越界运行时错误。 试图从文件中读取数据,如果该文件不存在,程序将会出现一个 ilenotFoundException运行时错误。或者是网络连接出现问题造成的运行时错误 §6.2异常类结构与组成 在Java程序设计语言中,异常对象都是派生于Throwable类的一个实例。 所有的异常都是由Throwable类继承而来,它的下一层分解为两个分支:Exceptior 和Eror 类层次结构描述了Java运行时系统的内部错误和资源耗尽错误。应用程序不 抛出这种类型的对象。在设计Java程序时,需要关注Exception层次结构。 Exception类有若干子类,每一个子类代表了一种特定的运行时错误。这些子类是 系统事先定义好并包含在Java类库中的,称为系统定义的运行异常。 由于定义了相应的异常,Jv程序即使产生一些错误,如引用空对象等,系统也 会自动产生一个对应的异 常对象来处理和控制这个错误,避免其蔓延或产生更大的问 系统定义的运行异常 异常对应的系统运行错误 ClassNotFoundException 未找到欲装载使用的类 教组域界使用 FileNotFoundException 未找到指定的文件或目录 IOException 输入、输出错误 NullPointerException 引用空的尚无内存空间的对象 第1页
内 蒙 古 科 技 大 学 教 案 第 1 页 第六章 异常处理 本章学习重要目标: 掌握异常类结构与组成 掌握异常处理机制 掌握抛出异常和捕获异常的方法 掌握多异常处理的方法 §6.1 引言 生活中,我们会根据不同的异常进行相应的处理,而不会就此中止我们的生活。 在程序运行过程中,如果环境检测出一个不可能执行的操作,就会出现运行时错误 (runtime error),叫做异常。如果异常没有被处理,那么程序将会非正常终止。 在理想状态下,在程序中用户输入数据的格式永远都是正确的,程序选择打开的文 件也一定存在。然而现实世界却充满了带有问题的代码。 例如:ArrayIndexOutOfBoundsException 数组下标越界运行时错误。 试图从文件中读取数据,如果该文件不存在,程序将会出现一个 FileNotFoundException 运行时错误。或者是网络连接出现问题造成的运行时错误。 §6.2 异常类结构与组成 在 Java 程序设计语言中,异常对象都是派生于 Throwable 类的一个实例。 所有的异常都是由 Throwable 类继承而来,它的下一层分解为两个分支:Exception 和 Error。 Error 类层次结构描述了 Java 运行时系统的内部错误和资源耗尽错误。应用程序不 抛出这种类型的对象。在设计 Java 程序时,需要关注 Exception 层次结构。 Exception 类有若干子类,每一个子类代表了一种特定的运行时错误。这些子类是 系统事先定义好并包含在 Java 类库中的,称为系统定义的运行异常。 由于定义了相应的异常,Java 程序即使产生一些错误,如引用空对象等,系统也 会自动产生一个对应的异常对象来处理和控制这个错误,避免其蔓延或产生更大的问 题。 系统定义的运行异常 异常对应的系统运行错误 ClassNotFoundException 未找到欲装载使用的类 ArrayIndexOutOfBoundsException 数组越界使用 FileNotFoundException 未找到指定的文件或目录 IOException 输入、输出错误 NullPointerException 引用空的尚无内存空间的对象
内蒙古科技大学 教 案 ArithmeticException 算术错误,如除数为0 InterruptedException 线程在睡眠、等待或因其他原因暂停 时被其他线程打断 UnknownHostException 无法确定主机的P地址 MalformedURLException URL格式错误 §6.3异常处理机制 人们在调到错误时会感觉不好。如果一个用户在运行程序期间,由于程序的错误 或一些外部环境的影响造成用户数据的丢失,用户就有可能不再使用这个程序了。 为了避免这类事情的发生,程序至少应该做到以下几点。 ①向用户通告错误: ②保存所有的操作结果: ③允许用户以适当的形式退出。 每当Java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类 与之相对应时 系统都会 一个相应的该异常类 的对象, 即产生 个异常 一个异常对象严生 ,系统中就一定有相应的机制来处理它,确保不会产生 死机或对操作系统的损害,从而保证了整个程序运行的安全性。这就是Jav阳的异常处 理机制。 Java的异常处理是通过5个关键字来实现的:ty、catch、finally、throw、throw §6.4抛出异常 在Java中,如果某个方法不能够采用正常的途径完成它的任务,就可以通过另外 个途径退出方法。 在这种情况下,方法并不返回任何值,而是抛出(Ow)一个封装了错误信息的 对象 需要注意的是,这个方法将立即退出,并不返回任何值。此外,调用这个方法的 代码也将无法继续执行,同时,异常处理机制开始搜索能够处理这种异常状况的异常 处理器(exception handler)。 a的方法可以抛出一个异常。因为,一个方法不仅需要告诉编译器将要返回什 么值, 还要告诉编译 可能发生 什么错误。 例如: “段读 取文件的代码知道有可能读取的文件不存在,或者内容为空,因此 试图处理文件信息的代码需要通告编译器可能会抛出IOException类的异常。 例如:下面是标准类库中提供的 FilelnputStream类的一个构造器的声明 个声明表示这个的 s FileNotFoundException 益器将产生一个对象,但也有可能抛出 FileNotFoundException异常。 如果发生了这种情况,构造器不会初始化一个新的FilelnputStream对象,而是抛 第2页
内 蒙 古 科 技 大 学 教 案 第 2 页 ArithmeticException 算术错误,如除数为0 InterruptedException 线程在睡眠、等待或因其他原因暂停 时被其他线程打断 UnknownHostException 无法确定主机的 IP 地址 MalformedURLException URL 格式错误 §6.3 异常处理机制 人们在遇到错误时会感觉不好。如果一个用户在运行程序期间,由于程序的错误 或一些外部环境的影响造成用户数据的丢失,用户就有可能不再使用这个程序了。 为了避免这类事情的发生,程序至少应该做到以下几点: ① 向用户通告错误; ② 保存所有的操作结果; ③ 允许用户以适当的形式退出。 每当 Java 程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类 与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常。 一旦一个异常对象产生了,系统中就一定有相应的机制来处理它,确保不会产生 死机或对操作系统的损害,从而保证了整个程序运行的安全性。这就是 Java 的异常处 理机制。 Java 的异常处理是通过 5 个关键字来实现的:try、catch、 finally、throw、throws §6.4 抛出异常 在 Java 中,如果某个方法不能够采用正常的途径完成它的任务,就可以通过另外 一个途径退出方法。 在这种情况下,方法并不返回任何值,而是抛出(throw)一个封装了错误信息的 对象。 需要注意的是,这个方法将立即退出,并不返回任何值。此外,调用这个方法的 代码也将无法继续执行,同时,异常处理机制开始搜索能够处理这种异常状况的异常 处理器(exception handler)。 Java 的方法可以抛出一个异常。因为,一个方法不仅需要告诉编译器将要返回什 么值,还要告诉编译器有可能发生什么错误。 例如:一段读取文件的代码知道有可能读取的文件不存在,或者内容为空,因此, 试图处理文件信息的代码需要通告编译器可能会抛出 IOException 类的异常。 例如:下面是标准类库中提供的 FileInputStream 类的一个构造器的声明 public FileInputStream(String name) throws FileNotFoundException 这个声明表示这个构造器将产生一个 FileInputStream 对象,但也有可能抛出一个 FileNotFoundException 异常。 如果发生了这种情况,构造器不会初始化一个新的 FileInputStream 对象,而是抛
内蒙古科技大学 教 案 出一个FileNotFoundException类对象。 如果这个方法抛出了这样一个异常对象,运行时系统就会开始搜索异常处理器 以便知道如何处理FileNotFound正 cion类对象。 Java程序在运行时如果引发了 个可识别的错误,就会产生 一个与该错误相对应 的异常类的对象,这个过程被称为异常的抛出。根据异常类的不同,抛出异常的方法 也不同。 §6.4捕获异常 当一个异常被抛出时,应该有专门的语句来接收这个被抛出的异常对象,这个过 程被称为捕获异常。当一个异常类的对象被捕获或接收后,用户程序就会发生流程的 跳转,系统中止当前的流程而跳转至专门的异常处理语句块,或直接跳出当前程序回 到损作系续。 如果某个异常发生的时候没有在任何地方进行捕获,那程序就会终止执行,并在 控制台上打印出异常信息,其中包括异常的类型和堆栈的内容。 在Java程序里,异常对象是依靠以catch语句为标志的异常处理语句块来捕捉和 处理的。异常处理语句块又称为catch语句块,其格式如下 语句组: }catch(异常类名异常形式参数名){ 异常处理语句组: §6.6多异常的处理 用多异常处理机制 一段代码可能会引发多种类型的异常当引发异常时,会按顺序来查看每个cch 语句,并执行第一个与异常类型匹配的catch语句。执行其中的一条catch语句之后, 其后的catch语句将被忽略。 第3页
内 蒙 古 科 技 大 学 教 案 第 3 页 出一个 FileNotFoundException 类对象。 如果这个方法抛出了这样一个异常对象,运行时系统就会开始搜索异常处理器, 以便知道如何处理 FileNotFoundException 类对象。 Java 程序在运行时如果引发了一个可识别的错误,就会产生一个与该错误相对应 的异常类的对象,这个过程被称为异常的抛出。根据异常类的不同,抛出异常的方法 也不同。 §6.4 捕获异常 当一个异常被抛出时,应该有专门的语句来接收这个被抛出的异常对象,这个过 程被称为捕获异常。当一个异常类的对象被捕获或接收后,用户程序就会发生流程的 跳转,系统中止当前的流程而跳转至专门的异常处理语句块,或直接跳出当前程序回 到操作系统。 如果某个异常发生的时候没有在任何地方进行捕获,那程序就会终止执行,并在 控制台上打印出异常信息,其中包括异常的类型和堆栈的内容。 在 Java 程序里,异常对象是依靠以 catch 语句为标志的异常处理语句块来捕捉和 处理的。异常处理语句块又称为 catch 语句块,其格式如下 try { 语句组; } catch ( 异常类名 异常形式参数名) { 异常处理语句组; } §6.6 多异常的处理 catch 块紧跟在 try 块的后面,用来接收 try 块可能产生的异常,但是实际上一个 try 块可能产生多种不同的异常,如果希望能采取不同的方法来处理这些例外,就需要使 用多异常处理机制。 一段代码可能会引发多种类型的异常当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个与异常类型匹配的 catch 语句。执行其中的一条 catch 语句之后, 其后的 catch 语句将被忽略