Java编程——第5讲 异常处理

更新时间:2023-05-21 06:25:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第五讲 异常处理

主要内容

Case:TryCatchDemo.java 5.1 异常处理概述

什么是异常 为何采用异常处理

5.2 异常的分类与层次 5.3 异常的处理机制

对异常处理的进一步讨论作业java中的异常处理 开始 返回 上一页 下一页 2

5.1 异常处理概述

5.1.1 什么是异常

异常就是在程序的运行过程中所发生的意外 事件,它中断指令的正常执行。 在Java中,把异常分为错误(Error)与异 常(Exception)两大类。 Java中提供了一种独特的处理异常的机制, 通过异常来处理程序设计中出现的错误。 异常情况(Exception)表示另外一种“非 同寻常”的错误。这种错误通常是不可预测 的。常见的异常情况包括内存不足,找不到 所需的文件等。 系统异常见P225 表7.1java中的异常处理 开始 返回 上一页 下一页 3

5.1.2 为何使用意外处理:把出错处理和正常代码分开。比如有程序是处理 文件,大家看流程,这个流程中充满了错误可能。 readFile { 打开文件;打不开咋办? 判断大小; 大小判断失败怎么办?(磁带) 分配内存; 内存不够 读入内存; 文件读不出来 关掉文件; 文件关不掉。。 } 解决方法:写大量的if语句。

java中的异常处理

开始

返回

上一页

下一页

传统的错误检测和纠正errorCodeType readFile { initialize errorCode = 0; ① 打开文件; if (打开文件成功) {② 判断文件长 if (文件长取到) {③ 分配内存 if (分内存成功) { ④ 读入内存 if (读文件失败) {errorCode = -1; }//读文件判断 } else {errorCode = -2; } //分配内存失败 } else {errorCode = -3; } //取不到文件长 ⑤ 关闭文件; if (文件没关&& errorCode == 0) {errorCode = -4; } else {errorCode = errorCode and -4; } } else {errorCode = -5; } return errorCode; }java中的异常处理 开始 返回 上一页 下一页 5

从上面的流程可看出真正有用的代码不多, 就五条而已,其它全部是判断错误用的,主 要逻辑都被错误处理代码混得看不清了,程 序可读性差,出错返回信息量太少。 在Java中,处理这种情况的方法是利用异 常处理,把出错处理和正常代码分开,Java 异常处理通过5个关键字 try,catch,finally,throw和throws进行管理。

java中的异常处理

开始

返回

上一页

下一页

Java的解决方式readFile {//结构清楚,无需自己判断,代码量小。 try { 打开文件; 判断大小; 分配内存; 读入内存; 关掉文件; } catch (文件打开失败) { 处理代码; } catch (大小取不到失败) { 处理代码; } catch (内存分配失败) { 处理代码; } catch (读取失败) { 处理代码; } catch (文件关闭失败) { 处理代码; }}java中的异常处理 开始 返回 上一页 下一页 7

异常示

例class A { public static void main(String[] args) { int a=20,b=0; try{ System.out.println(a/b); } catch(Exception e){ System.out.println(“除数为 0"); } } }java中的异常处理 开始 返回 上一页 下一页 8

5.2 异常类的分类与层次

5.2.1 异常类的层次结构

在jdk中,每个包中都定义了异常类,而所有的异常类都 直接或间接地继承于ng.Throwable类。当Java 程序遇到不可预料的错误时,会实例化一个从Throwable 类继承的对象。 java中的异常类可分为两大类:

◇ Error: 错误Error类指的是系统错误或运行环境出现的错误, 这些错误一般是很严重的错误,即使捕捉到也无法处理,由Java 虚拟机生成并抛出,包括系统崩溃、动态链接失败、虚拟机错误 等,在Java程序中不做处理。 ◇ Exception: 异常Exception类则是指一些可以被捕获且可能恢 复的异常情况,是一般程序中可预知的问题。对于异常可分为两 类:

(1) 运行时异常:程序中可以不做处理,直接由运行时系统来处理。 (2) 非运行时异常:在程序中必须对其进行处理,否则编译器会指出 错误。开始 返回 上一页 下一页 9

java中的异常处理

异常类的结构层次ng Object Error Throwable Exception RuntimeException ClassNotFoundException IllegalAccessException CloneNotSupportedException InstantiationException InterruptedException NoSuchFieldException NoSuchMethodException java.sql DataTruncation SQLException SQLWarning java.io EOFException IOException FileNotFoundException ArithmeticException ArraystoreException IndexOutOfBoundsException NullPointerException

java中的异常处理

开始

返回

上一页

下一页

5.2.2 Exception类

1. Exception类的构造方法

Exception类有两种构造方法: Exception():没有指定的消息串,直接构造 一个Exception。 Exception(String exp):根据参数提供的消 息串,创建一个Exception。Exception myExp=new Exception(“异 常!”);

例如,创建一个异常对象:

java中的异常处理

开始

返回

上一页

下一页

2. 常用方法

Exception类的方法均继承自Throwable类,可以为程 序提供一些有关异常的信息,常用方法如下: String getMessage() :返回该异常所存储的描述性 字符串。 String toString():返回异常对象的详细信息,包含该 类名和指出所发生问题的描述性消息的字符串。 void printStackTrace():将异常发生的路径,即引起 异常的方法调用嵌套序列打印到标准错误流。 例如:

System.out.println(myExp.getMessage()); 此语句可以将异常对象myExp的异常信息描述打印输出,在屏 幕上显示“异常!”。

java中的异常处理

开始

返回

上一页

下一页

5.2.3 自定义异

常类在程序中,可以创建自定义的异常类。用户自定 义的异常类都要直接或间接地继承Exception类。 可按照下面的方法自定义一个异常类:

(1) 创建一个继承Exception类或者其它已存在的异 常类的子类。 (2) 在该类中创建一个默认的无参数构造方法,该构 造方法以适当的错误消息作为输入,调用它的超类 的构造方法。 (3) 再增加一个带字符串参数的构造方法,该构造方 法以适当的错误消息作为输入(还包括输入的字符 串)来调用其超类相应的构造方法。

java中的异常处理

开始

返回

上一页

下一页

例如,定义一个继承于Exception类的用户自定 义异常类,语句如下:

class MyException extends Exception { MyException() { super(“数据错误!”); } MyException(String exp) { super(exp); } }java中的异常处理 开始 返回 上一页 下一页 14

5.3 异常的处理机制每当Java程序运行过程中发生一个可识别 的运行错误时,即该错误有一个异常类与之 相对应时,系统都会产生一个相应的该异常 类的对象,即产生一个异常。一旦一个异常 对象产生了,系统中就一定有相应的机制来 处理它,确保不会产生死机、死循环或其他 对操作系统的损害,从而保证了整个程序运 行的安全性。这就是Java的异常处理机制。

java中的异常处理

开始

返回

上一页

下一页

Java中处理异常有两种方式:捕获异常、 声明抛弃异常。

捕获异常,就地解决,并使程序继续执行。 声明抛出异常也就是将异常向外转移,即将 异常抛出方法之外,由调用该方法的环境去 处理。

java中的异常处理

开始

返回

上一页

下一页

5.3.1 捕获异常当Java运行时系统得到一个异常对象时, 它将会沿着方法的调用栈逐层回溯,寻找处 理这一异常的代码。找到能够处理这种类型 的异常的方法后,运行时系统把当前异常对 象交给这个方法进行处理,这一过程称为捕 获(catch)异常。这是积极的异常处理机制。 如果Java运行时系统找不到可以捕获异常的 方法,则运行时系统将终止,相应的Java程 序也将退出。

java中的异常处理

开始

返回

上一页

下一页

捕获异常是通过try-catch-finally语句实 现的。

处理异常的程序结构如下:try{ //接受监视的程序块,在此区域内发生的异常,由catch 中指定的程序处理 }catch(要处理的异常种类和标识符){ //处理异常 }catch(要处理的异常种类和标识符){ //处理异常 } … }finally{ //最终处理 }java中的异常处理 开始 返回 上一页 下一页 18

try-catch-finally语句

1. try

捕获异常的第一步是用try{…}选定捕获异常的范围, 所有可能抛出异常的语句都放

入try模块中。 try模块中的语句是程序正常流程要执行的语句,但是 在执行过程中有可能出现异常。 每个try代码块可以伴随一个或多个catch语句,用于处 理try代码块中所生成的异常事件。catch语句只需要一 个形式参数指明它所能够捕获的异常类型,这个类必须是 Throwable的子类,运行时系统通过参数值把被抛弃的 异常对象传递给catch块。

2. catch(必有)

java中的异常处理

开始

返回

上一页

下一页

try-catch-finally语句在catch块中是对异常对象进行处理的代 码,与访问其它对象一样,可以访问一个异 常对象的变量或调用它的方法。 getMessage( )是类Throwable所提供的 方法,用来得到有关异常事件的信息,类 Throwable还提供了方法 printStackTrace( )用来跟踪异常事件发生 时执行堆栈的内容。 例如: java中的异常处理 开始 返回 上一页 下一页 20

try-catch-finally语句try{ ...... }catch( FileNotFoundException e ){ System.out.println( "message: "+e.getMessage() ); e.printStackTrace( System.out ); }catch( IOException e ){

System.out.println(e.getMessage() ); }

java中的异常处理

开始

返回

上一页

下一页

本文来源:https://www.bwwdw.com/article/wf14.html

Top