

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 6 章 Java 的异常处理学习目标:异常的基本概念 Throwable类及其子类运行时异常捕获异常芦明异常抛出异常自定义异常异常处理机制的优点使用异常处理机制的一些原则6. 1 异常的基本概念异常是在程序运行过程中发生的异常事件,比如除()溢出、数组越 界、文件找不到等,这些事件的发生将阻止程序的正常运行。程序设 计时,必须考虑到可能发生的异常事件并做出相应的处理。C语言中,通过使用if语句来判断是否出现了异常并进行处理。但 是,这种错误处理机制会导致不少问题。例:main()int a,b,c;if(b!=O)c=a/b;elseprintf(“除数不能为0”);6 1异常的基本概念异
2、常处理机制在一个方法的运行过程中,如果发生了异常,则这个方法生成 代表该异常的一个对象.并把它交给运行时系统.运行时系统寻找 相应的代码来处理这一异常。我们把生成异常对象并把它提交给运 行时系统的过程称为抛出( )一个异常。运行时系统在方法的调 用栈中査找,从生成异常的方法开始进行回朔,直到找到包含相应 异常处理的方法为止,这一个过程称为捕获( )一个异常。生活中事件的处理机制在社会活动中,如果发生了火灾、交通事故、遭窃、生病等突然 发生的异常事件,我们会打电话报警( )。城市中的各个部门中一 定会有一个来处理这个突发事件( )。6. 2 Throwable 类及其子类用面向对象的方法处理异常
3、,就必须建立类的层次。类Throwable位于这一类层次的最顶层,只有它的后代才可以作为一个异常被抛出。6. 2 Throwable类及其子类Error类对象(如动态链接错误等),由Java虚拟机生成并抛出。 通常,Java程序不对这类异常进行处理。Exception类对象是Java程序处理或抛出的对象。(1) RunTimeException类及其继承类:java程序在运行时生成异 常,如被0除(ArithmeticException )、数组下标越界(ArraylndexOutOfBoundsException)等,其产生比较频繁,处理麻 烦,对程序可读性和运行效率影响太大。因此由系统检测
4、,用户可不做 处理,系统将它们交给缺省的异常处理程序(当然,必要时,用户可对 其处理)。(2)除此( (RunTimeException)之外,其他的异常类:必须 被捕获或被重新抛出,否则编译会错误。6. 2 Throwable类及其子类C ArraylndexOutOfBoundsException(ExceptiCRunTimError 类ArithmeticExceptionrowable6 3运行时异常运行时异常是由Java运行时系统在程序的运行过程中检测到的,它 可能在程序的任意部位发生,而且其数目可能很大,因此Java编译器允 许程序不对它进行处理。这时,Java运行时系统会把生成
5、的运行时异常 对象交给缺省的异常处理程序,在标准输出上显示异常的内容以及发生 异常的位置。例:public class RuntimeExceptionExample public static voidmain( String args )int i=0;int r=4/i;运行结果为:C: java Runt imeExcept ionProcjava. lang. ArithmeticException: /by zeroat RuntimeExceptionProc. main(RuntimeExceptionProc java:4)6 4捕获异常我们可以用try-catch-fina
6、lly语句来捕获一个或多个异常, 语法结构如下:try可能产生异常的代码段;catch(异常类名1对象名1)处理语句组catch(异常类名2对象名2)处理语句组2;finally最终处理语句;6. 4 捕获异常1. try语句try语句用大括号指定了一段代码, 该段代码可能会抛出一个或多 个异常,同时,该段代码也指定了它后面的catch语句所捕获的异常的 范围。例:tryint a=l, 2, 3, 4, 5;int sum=O:for(int i=0;i=5;i+)sum=sum+ai;System, out. print In (sum);6. 4 捕获异常2.catch语句catch语句
7、的参数类似于方法的声明,包括一个异常类型和一个异常 对象。异常类型必须为Throwable类的子类,它指明了catch语句所处理 的异常类型,异常对象则由运行时系统在try所指定的代码块中生成并被 捕获,大括号中包含对象的处理,其中可以调用对象的方法。catch句可以有多个,分别处理不同类的异常。Javaig行时系统从 上到下分别对每个catch句处理的异常类型进行检测,直到找到与类型 相匹配的catch句为止。这里,类型匹配指catch所处理的异常类型与 生成的异常对象的类型完全一致或者是它的父类,因此,catch语句的排 列顺序应该是从特殊到一般(ExceptionExamplel.jav
8、a)o也可以用一个catch句处理多个异常类型,这时它的异常类型参数 应该是这多个异常类型的父类,程序设计中要根据具体的情况来选择catch语句的异常处理类型(ExceptionExample2.java)。6 4 捕获异常3. finally语句玻處垃圾6 4捕获垃圾桶tryffitryffi限定的代码中,当抛出一个异常时,其后的代码不会被执行 。通过Hnally语句可以指定一块代码。无论try所指定的程序块中抛出 或不抛出异常,也无论catch语句的异常类型是否与所抛出的异常的类 型一致,finally所指定的代码都要被执行,它提供了统一的出口。通常在finally语句中可以进行资源的清除
9、工作。如关闭打开的文件 等。例子:ExceptionExample3 .java6.5声明异常在方法中使用try-catch -f i n a I ly可以由这个方法来处理它所生 成的异常。在有些情况下,一个方法并不需要处理它所生成的异常,而是向上传递,由调用它的方法来处理这些异常,这时就要用到throws子句,它包含在方法的声明中,其格式如下:returnType methodName( paramlist)exception List其中在ExceptionList中可以声明多个异常,用逗号隔开。例:static void fun( int sei ) throwsArithmeticEx
10、ception, ArrayIndexOutOfBoundsException完整例子:ExceptionExample4. java在fun()方法中生成的异常通过调用栈传递给main。方法,由main()方法进行处理。注意:对非运行时异常,必须捕获或声明。6.6抛出异常在捕获一个异常前,必须有一段Java代码生成一个异常对象并把 它抛出。抛出异常的代码可以是你的Java程序,或者是JDK中某个类, 或者是Java运行时系统。它们都是通过thro甬句来实现的。throw句的格式为:throw ThrowableObject;其中ThrowableObject必须为Throwable类或其子类
11、的对象。例如我们可以用throw new ArithmeticExcptionO;来抛出一个 算术异常(ExceptionExample5.java)。另外,我们还可以定义自己的异常类,并用throw语句来抛出它。6.7自定义异常创建用户自定义异常的语法格式如下:class自定义异常extends父类异常名例:class MyException extends ExceptionMyExcept ion(Str i ng msg)super(msg);MyException()完整例子:Exception Example6. java6. 8异常处理机制的优点1.Java通过面向对象的方法进行
12、异常处理,把各种不同的异常事件进 行分类,体现了良好的层次性,提供了良好的接口,这种机制对于 具有动态运行特性的复杂程序提供了强有力的控制方式。2.Java的异常处理机制使得处理异常的代码和“常规”代码分开,减 少了代码的数量,增强了程序的可读性。(大家可以比较一下用if语句来处理异常的情形,这时需要进行一系列条件的判定)。3.Java的异常处理机制使得异常事件可以沿调用栈自动向上传播,而 不是C语言中通过函数的返回值来传播,这样可以传递更多的信息 并且简化代码的编写。4.由于把异常事件当成对象来处理,利用类的层次性我们可以把多个 具有相同父类的异常统一处理,也可以区分不同的异常分别处理, 使
13、用非常灵活。6. 8使用异常处理机制的一些原则1对非运行时异常必须捕获或声明,而对运行时异常则不必,可以交给Java运行时系统来处理。2对于自定义的异常类, 通常把它作为类Exception类,而不作为类Error的子类,因为Error类通常用于系统内严重的硬件错误。并且在 多数情况下,不要把自定义的异常类作为运行旳异常类RuntimeException子类。另外,自定义异常类的类名常常以Exception结尾。3.在捕获或声明异常时,要选取合适类型的异常类,注意异常的类层次, 根据不同的情况使用一般或特殊的异常类。4.根据具体的情况选择在何处处理异常。是在方法内捕获并处理呢?还 是用thro
14、ws子句把它交给调用栈中上层的方法去处理?生 使用finally语句为异常处理提供统一的出口。_ _6. 9实际应用程序功能将键盘输入保存到文件中,要求只接收英文字母,如果输入其他 字符,将文件自动删除。目的:用于理解将业务代码和异常处理分开的概念/ ExceptionExample70java import java.io.*;public class ExceptionExample7public static void main(String args) throws IOException Inputdata a = new Inputdata();trya.input();ycatc
15、h ( My Exception e)boolean flag;e.fout.close();File f=new File(,data.txtM); flag=f.delete();if(flag=true)System.out.println(lv成功删除文件);elseSystem.out.println(lv删除文件失败”);/ My Exception, java import java.io.*; public class MyException extendsExceptionpublic MyException(FileOutputStream tout) this.fout=fout;public FileOutputStream tout;/Inputdata, java import java.io.*; public class Inputdatapu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年房地产经纪人之业务操作过关检测试卷B卷附答案
- 2025年执业药师之中药学专业一题库练习试卷B卷附答案
- 林业机械节能减排技术考核试卷
- 肥料在农业产业链优化中的地位考核试卷
- 航空航天器星载红外探测器技术考核试卷
- 石棉制品在户外烧烤设备的防火考核试卷
- 生物制药的药物晶体工程考核试卷
- 2025年中国肾活检针市场调查研究报告
- 租赁经营的财务管理与资金筹措考核试卷
- 自行车旅行与文化体验考核试卷
- GB/T 11836-2023混凝土和钢筋混凝土排水管
- 夜空中最亮的星二部合唱简谱
- 水库防汛抢险应急预案编制大纲
- GB/T 5013.5-2008额定电压450/750V及以下橡皮绝缘电缆第5部分:电梯电缆
- GB/T 26519.1-2021工业过硫酸盐第1部分:工业过硫酸钠
- GB/T 2440-2017尿素
- GB/T 17166-2019能源审计技术通则
- 充电设施安全风险辨识清单
- 钙与维生素D的补充教案课件
- 中国胸痛中心建设流程及认证标准解读课件
- DB44-T 1661-2021《河道管理范围内建设项目技术规程》-(高清现行)
评论
0/150
提交评论