第6章 Java异常处理
更新时间:2023-05-23 03:23:01 阅读量: 实用文档 文档下载
- 机器人大乱斗第6章推荐度:
- 相关推荐
Java异常处理
返回总目录
第6章 Java异常处理 章 异常处理教学内容6.1概述 6.2异常的类型 6.3Java异常产生与捕捉
Java异常处理
返回目录
6.1概述 概述异常就是在程序运行时由代码所产生的不正常状态。换句话说, 异常就是一个运行错误。在不支持异常处理的计算机语言中,错误 必须由人工进行检查和处理,这显然麻烦而低效。Java语言提供了 异常处理机制,为方法的异常终止和出错处理提供了清楚的接口。 异常(exception)也就是异常事件(exceptional event)的简 称,它是在程序运行中出现的违背正常流向的事件。许多不同种类 的错误可以导致异常,从严重的硬件错误到简单的编程错误。当在 Java方法中发生这样的错误时,方法将创建一个异常对象,并把它 交给运行系统处理,运行系统负责找到处理错误的代码并执行。异 常对象包括异常的信息、类型和错误发生时程序的状态以及对该错 误的详细描述。
Java异常处理
返回目录
6.2异常的类型—异常类的层次结构 异常的类型 异常类的层次结构Java语言用继承的方式来组织各种异常。所有的异常都是 Throwable类或其子类,而Throwable类又直接继承于Object类。 Throwable类有两个子类:Error类与Exception类。Exception类又进 一步细分为RuntimeException(运行时异常)类和NonRuntimeException(非运行时异常)类。 如果程序中可能产生非运行时异常,就必须明确地加以捕捉并处 理,否则就无法通过编译检查。与非运行异常不同的是,错误 (Error)与运行异常(RuntimeException)不需要程序明确地捕捉并 处理。
Java异常处理
返回目录
6.2异常的类型—Exception类及其子类 异常的类型1.运行时异常 运行时异常表现在Java运行系统执行过程中的异常,它是指Java程序 在运行时发现的由Java解释抛弃的各种异常,包括算术异常、下标异常 等。下表列出几种常见的运行时异常。
Java异常处理
返回目录
6.2异常的类型—Exception类及其子类 异常的类型2.非运行时异常 非运行时异常是由编译器在编译时检测是否会发生在方法的执行过 程中的异常。非运行时异常是Non-RuntimeException及其子类的实 例,可以通过throw语句抛弃。Java在其标准包ng、java.util、 java.io、中定义的异常类都是非运行时异常类。下表列出了 常见的非运行时异常。
Java异常处理
返回目录
6.2异常的类型—Error类及其子类 异常的类型Error类定义了正常情况下不希望捕捉的错误。在捕捉Error子类时 要多加小心,因为它们通常在出现灾难性错误时被创建。下表列出 一些常见的Error异常类。
Java异常处理
返回目录
6.3Java异常产生与捕捉 —产生异常 异常产生与捕捉 产生异常【引例1】 异常的产生。 import java.io.*; class Exception1 { public sta
tic void main(String args[]) { FileInputStream fis=new FileInputStream("text"); int b; while((b=fis.read())!=-1) { System.out.print((char)b); } fis.close(); } }
Java异常处理
返回目录
6.3Java异常产生与捕捉 —产生异常 异常产生与捕捉 产生异常该引例的第6行表明在一个文件“text”上建立文件输入流。运 行此程序时,如果这个文件并不存在,就会产生异常。另外,第8 行是读此文件的内容,如果该文件不存在,则从此文件中读取数据 时,也可能发生异常。
Java异常处理
返回目录
6.3Java异常产生与捕捉 —产生异常 异常产生与捕捉 产生异常【引例2】 异常的产生。 class Exception2 { public static void main(String args[]) { int a=0,b=0; a=36/b; System.out.println("a="+a); } }
Java异常处理
返回目录
6.3Java异常产生与捕捉 —产生异常 异常产生与捕捉 产生异常从该引例的第6行不难看出,除数为零。因此,运行此程序时必然 会发生除零溢出的异常事件,使程序无法继续运行。 上面的两个引例都有或可能有异常产生。对于一些异常,在程序中 必须对它进行处理,否则编译程序时会指出错误,如【引例1】;但 对另一些异常,在程序中可以不作处理,而直接由运行系统来处理, 如【引例2】。
Java异常处理
返回目录
6.3Java异常产生与捕捉 —捕捉异常 异常产生与捕捉 捕捉异常其语法为: try { 正常程序段, 正常程序段 可能抛弃异常 } catch(异常类 异常变量 异常类1 异常类 异常变量) { 捕捉异常类1有关的处理程序 捕捉异常类 有关的处理程序 段 } catch(异常类 异常变量) 异常类2 异常变量 异常类 { 捕捉异常类2有关的处理程序 捕捉异常类 有关的处理程序 段 } … finally { 退出异常处理程序段 }
Java异常处理
返回目录
6.3Java异常产生与捕捉 —捕捉异常 异常产生与捕捉 捕捉异常1.try 用来监视所在的程序块是否发生异常,如果发生异常就抛弃它。对 于系统产生的异常或程序块中未用try监视所产生的异常,将一律被 Java运行系统自动抛弃。 2.catch 用来捕捉try程序块中所抛弃的异常,并根据异常类型采取相应的方 法进行处理。每个try程序块后面紧接着一个或多个catch语句,用于 捕捉try程序块中所抛弃的一个或多个异常。catch语句只需要一个形 式参数,参数类型给出它能够捕捉的异常类型,这个类必须是 Throwable的子类,运行时系统通过参数值把被抛弃的异常对象传递 给catch块,在catch块中是对异常对象进行处理的代码。
Java异常处理
返回目录
6.3Java异常产生与捕捉 —捕捉异常 异常产生与捕捉 捕捉异常【边学边练6.1】 捕捉【引例1】中的异常。 import java.io.*; class Exception3 { public static void main(String args[]) { try { FileInputStream fis=new FileInputStream("text"); int b; while((b=fis.read())!=-1) {
System.out.print((char)b); } fis.close();
Java异常处理
返回目录
6.3Java异常产生与捕捉 —捕捉异常 异常产生与捕捉 捕捉异常这里使用了两个catch语句分别对try代码块中可能出现的两个异常 事件进行处理。 第一种情况,如果要打开的文件“text”在当前目录中不存在,程序运 行时会抛弃一个FileNotFoundException异常对象。由于第一个catch 语句与该异常类型匹配,所以程序将执行第一个catch语句,于是就会 显示下面的信息: java.io.FileNotFoundException:text(系统找不到指定文件。) 一般地,程序中如果有多个catch语句,那么,若有一个catch语句 的异常与抛弃的异常对相匹配,那么,此catch语句将被执行,其他 catch语句将被忽略。此例中,由于第一个catch语句首先得到匹配, 第二个catch语句将不会被执行。因此在安排catch语句的顺序时,首 先应该捕捉最特殊的异常,然后再逐渐一般化。通常在指定所捕捉的 异常类型时,应该避免选择最一般的类型(如Exception)。否则,当 异常事件发生时,程序中不能确切判断异常的具体类型并作出相应处理 以从错误中恢复。 第二种情况,如果要打开的文件“text”在当前目录中存在,程序的运 行结果会显示“text”文件中的内容。
Java异常处理
返回目录
6.3Java异常产生与捕捉 —捕捉异常 异常产生与捕捉 捕捉异常3.finally 捕捉异常的最后一步是通过finally语句为异常处理提供一个统一的 出口,使得在控制流转到程序的其他部分以前,能够对程序的状态作 统一的管理。不论在try代码块中是否发生了异常事件,finally代码块 中的语句都会被执行。
Java异常处理
返回目录
6.3Java异常产生与捕捉 —捕捉异常 异常产生与捕捉 捕捉异常4.抛弃异常:throw throw语句明确地抛弃一个异常。throw语句的一般格式如下: throw <异常对象实例 异常对象实例>; 异常对象实例 其中,<异常对象实例>必须是Throwable类或其子类的一个对象, 简单数据不能用于异常。 throw语句会中断程序流的执行,其后的语句将不会被执行。系统 会检测离throw最近的try块,看是否存在与throw语句抛弃的异常类型 相匹配的catch语句。如果找到匹配的catch语句,则控制转到catch语 句中。如果没找到匹配的catch语句,这个程序将被中断。下面的程序 产生并抛弃了一个异常,捕捉到这个异常的处理又抛弃一个异常到外 部调用方法的处理中。
Java异常处理
返回目录
6.3Java异常产生与捕捉 —捕捉异常 异常产生与捕捉 捕捉异常【边学边练6.3】 利用throw语句抛弃异常的例子。 public class Exception5 { static void demoproc() { try { throw new NullPointerException("demo");//抛弃一个 异常 } catch(NullPointerException e) { System.out.println("捕捉内部异
常.");//捕捉demoproc 内部异常 throw e;//抛弃另一个异常
Java异常处理
返回目录
6.3Java异常产生与捕捉 —捕捉异常 异常产生与捕捉 捕捉异常从程序结构中可以看到,main()方法创建了一个异常处理块,在 demoproc()方法中创建了另一个异常处理块。所以,这个程序有两 次机会处理同一个错误。执行此程序时,首先调用 demoproc() 方 法。在demoproc()中先抛弃一个NullPointerException异常,由 demoproc()内部的catch语句捕捉到,输出“捕捉内部异常”字样后, 再次抛弃一个同样的异常。由于该异常在demoproc()方法中不能被 捕捉到,所以只能被main()方法中的catch语句捕捉到并处理之。因 此,程序的运行结果如下: 捕捉内部异常 再次捕捉异常:ng.NullPointerException:demo
Java异常处理
返回目录
6.3Java异常产生与捕捉 —捕捉异常 异常产生与捕捉 捕捉异常5.声明抛弃异常:throws 如果一个方法可能抛弃一个异常而它自己又没有处理方法,那么异 常处理的任务就交给调用者去完成,此时,必须在方法中包括throws 子句,以便该方法的调用者捕捉该异常。一个throws子句列出了一个 方法可能抛弃的异常类型。包括throws子句的方法声明的一般格式如 下: <类型说明 方法名 参数列表 throws <异常类型表 类型说明> 参数列表) 异常类型表> 类型说明 方法名(参数列表 异常类型表 { 方法体 } 下面的程序试图抛弃一个它不捕捉的异常,因为这个程序没有指定 一个throws子句来声明抛出异常,所以程序不能编译通过。
Java异常处理
返回目录
6.3Java异常产生与捕捉 —捕捉异常 异常产生与捕捉 捕捉异常【边学边练6.4】 无声明的抛弃异常。 public class Exception6 { static void throwOne() { System.out.println("抛弃内部异常."); throw new IllegalAccessException("demo"); } public static void main(String[] args) { throwOne(); } } 修改后的正确程序如下。
Java异常处理
返回目录
6.3Java异常产生与捕捉 —捕捉异常 异常产生与捕捉 捕捉异常【边学边练6.5】 声明抛弃异常。 public class Exception7 { static void throwOne() throws IllegalAccessException { System.out.println("抛弃内部异常."); throw new IllegalAccessException("demo"); } public static void main(String[] args) { try { throwOne(); } catch(IllegalAccessException e)
正在阅读:
第6章 Java异常处理05-23
初级钳工试题(带答案)03-31
新版安徽农业大学土地资源管理考研经验考研参考书考研真题04-27
发电变电和输电的电气部分07-19
2006年高考语文试题及答案(湖北卷)06-07
2022年专业技术人员继续教育《岗位胜任力与创新研究力》练习题(04-09
第一次独自睡觉作文700字07-14
2022-2022年小学英语宁夏三年级期末考试测试试卷【9】含答案考点04-17
舌尖上的中国------兰溪篇05-31
庆新年贺词12-13
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 异常
- 处理
- Java
- 2012学校食堂食品卫生安全管理制度
- 安徽大学c语言试卷(3)
- 新建 2Microsoft PowerPoint 演示文稿 (2)
- 中兴ZXECS统一通信解决方案-2011-02-09精简
- 模电脉冲宽度调制器PWM报告
- 经皮神经电刺激(TENS)的研究新进展
- 幼年型类风湿性关节炎24例临床分析
- 施工组织设计和专项方案审批制度
- 2011年中级会计实务第一章练习题
- 英语 必修4 unit1 导学案
- 浅析文学作品的意识形态性
- 江苏省苏州市2015届高三上学期期末考试数学试卷 含答案
- 1计算机集成监控系统的设计及工业应用
- 和田玉 玛纳斯碧玉和岫岩老玉 的 射线粉晶衍射特征
- 2014年潍坊市初中学业水平考试生物试题(WORD版,有答案)
- 志愿者服务实施方案
- 苏教版六年级下册美术全册教案
- 沂南县食品药品监督管理局
- (2014-11-06)中小学学生艺术素质测评办法
- 复旦法硕考研难度分析