




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第7章章 包与异常包与异常 7.1 包 7.2 异常 第第7章章 包与异常包与异常 7.1 包 7.2 异常 本章学习目标 了解Java语言中包的概念 理解Java语言异常处理的机制 熟悉如何在程序中抛出、捕获和处理异常 掌握Java语言中自定义异常的应用 7.1 包 包的定义 l将多个类放在一起时,要保证类名不能重复。 当声明的类很多时,类名就有可能冲突,这就 需要一种机制来管理类名,这就是包。 l包是Java提供的一种区别类名空间的机制,是 类的组织方式,一个包对应一个文件夹,包中 还可以有包,称为包等级,如同文件夹中可以 有子文件夹。 l同一个包中类名不能重复,不同包中可以有相 同的类
2、名。 Java的系统包 Java提供了大量的类,为便于管理和使 用,分为不同的包。这些包又称类库或 API包,所谓API(application program interface)即应用程序接口。API包一方 面提供丰富的类与方法供大家使用。 许多Java API包都以“java.”开头,以 区别用户创建的包。 Java 常用包 1. java.lang包 java.lang包是Java语言的基础类库,包 含基本数据类型、数学函数、字符串类等。 这是惟一自动引入每个Java程序的类库。 Java 常用包 1. java.lang包 java.lang包中包含有以下主要类: 数据类型包装类,对
3、应8个基本数据类型。 用于字符串处理的String类和StringBuffer类。 系统类System。提供访问系统资源和标准输入输出方法。 Object类。它是Java类层次的根,所有其他类都是由 Object类派生出来的。其定义的方法,在其他类中都能使 用。 线程类Thread。 类操作类class。可以为类提供运行时的信息,如名字、 类型以及父类。 Java 常用包 2. java.util包 l包含一些低级的实用工具类。这些实用工具类使用方便, 而且很重要。主要有: 日期类Date、堆栈类Stack、随机 数类Random、向量类Vector等。 3. java.io包 ljava.i
4、o包是Java语言的输入输出类库,Java语言的文件 操作都是由该类库中的输入输出类来实现的。此外该类库 还提供了一些与其他外部设备交换信息的类。java.io包除 了包含标准输入、输出类外,还有缓存流、过滤流、管道 流和字符串类等。 Java 常用包 4. 包 l含有访问网上资源的URL类,用于通信的Socket类 和网络协议子类库等。 5. java.awt包 ljava.awt包提供了创建图形用户界面的全部工具。 它包括许多我们熟悉的图形组件类,如窗口、对话框、 按钮、复选框、列表、菜单、滚动条和文本区等类; 用于管理组件排列的布局管理器类Layout;以及常用 的颜色类Color、字体
5、类Font。 ljava.awt.event类库用来处理各种不同类型的事件 Java 常用包 6. java.applet包 ljava.applet是所有小应用程序的基础类库。 它只包含了一个Applet类,所有小应用程序都 是从该类中派生的。 创建包 声明包语句格式为: package 自定义包名; l声明包语句必须添加在源程序的第一行,表示 该文件的全部类都属于这个包。还可以在不同 的文件中使用相同的声明包语句,这样就可将 不同文件中的类都包含在相同的包中了,如同 将不同的文件放在同一个文件夹中,以后其他 类就可以引用这个包中创建好的类了。下面举 例说明如何建立自定义包。 创建包 【案例
6、分析案例分析】 package hospital_pack;/ 用package来建立 一个名为hospital_pack的包 lpublic interface Hospital /创建 一个Hospital接口,它存在于hospital_pack 包中 lString name=GDPUHospital; lString addr=guangzhou; lpublic void department(); l 包的引用 导入包语句 l在编写源程序时,如果要使用某个包中的类,要在 Java程序的开头添加import语句,指明源程序要使用含 有该类的包。 lJava.lang包是系统自动隐含导
7、入的,所以可以不使用 import语句。 包的引用 【案例分析案例分析】 lpackage hospital_ermedic;/创建一个 名为hospital_ermedic的包 limport hospital_pack.Hospital;/ 导入 hospital_pack包中的Hospital类(接口) lpublic class InternalMedicine implements Hospital lpublic void department() lSystem.out.println(本院内科有:消化内 科,心内科,肾内科,肿瘤内科,内分泌科,神
8、经内 科等); l l 7.2 异常 异常是用来处理程序错误的有效机制。 在程序执行期间,会有许多意外的事件 发生。例如,程序申请内存时没有申请到、 对象还未创建就被使用、死循环等,都称 为运行错误。 根据错误的性质将运行错误分为致命性 错误和异常两种类型。 异常的定义 运算时除数为0,或操作数超出数据范围, 等,这类现象称为异常。 对于异常情况,可在源程序中加入异常 处理代码,当程序出现异常时,由异常处 理代码调整程序运行流程,使程序仍可正 常运行直到正常结束。 由于异常是可以检测和处理的,所以产 生了相应的异常处理机制。 异常的分类 Throwable Error Exception Th
9、readDeath JVMError IoException RuntimeException 用户自定义 的异常 异常的分类 1、Throwable lThrowable 类是 Java 语言中所有错误 或异常的超类。只有当对象是此类(或其子类 之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。所有能够抛出、并且 能够被控制的异常或错误都必须从 Throwable类继承。 异常的分类 2、Error lError 是 Throwable 的子类,一般是指java 虚拟机(JVM)出错或是机器本身硬件、操作 系统等出错,这种错误不是编写的java程序所 导致的,这
10、就好比是天灾,不是人为引起的, 也不是程序本身所能控制的,所以一般不去处 理这种类型的错误。 异常的分类 3、Exception lException 类及其子类都是Throwable 类的 子类。这些异常一般是因编写的程序而导致的, 是可以人为控制的。这就好比是人祸,可以避 免、防范和处理的。它指出了合理的应用程序 想要捕获的条件,表示程序本身可以处理的异 常。 异常的分类 4、RuntimeException lRuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。 Java编译器不去检查它,也就是说,当程序 中可能出现这类异常时,即使没有用 try
11、.catch语句捕获它,也没有用throws字 句声明抛出它,还是会编译通过,但在运行时 可能出现问题。比如前面除数为0的例子中, 出现的ArithmeticException异常就是此类的 一个异常子类。 异常处理机制 1. 抛出异常 lJava是这样规定的: 当语义限制被违反时, 将会抛出(throw)异常,即产生一个异常事 件,生成一个异常对象,并把它提交给运行系 统,再由运行系统寻找相应的代码来处理异常。 一个异常对象可以由Java虚拟机来产生,也可 以由运行的方法生成。异常对象中包含了异常 事件类型、程序运行状态等必要信息。 异常处理机制 2. 捕获异常 l异常抛出后,运行时系统从生
12、成异常对象的代 码开始,按方法的调用顺序进行查找,直到找 到包含相应处理的方法代码,并把异常对象交 给该方法为止,这个过程称为捕获(catch)异 常。 l异常处理机制就是: 当语义限制被违反时, 将会抛出异常对象,并将引起程序流程从异常 发生点转移到程序员指定的处理异常方法代码 处进行异常处理。 异常的处理 异常处理语句格式为: ltry / 被监视的代码段,一旦发生异常,则交由 其后的catch代码段处理 lcatch (异常类型 e) / 要处理的第一种异常 lcatch (异常类型 e) / 要处理的第二种异常 l lfinally / 最终处理 异常的处理 try 和catch 是J
13、ava中用来处理异常的关键字, 其作用如下: ltry语句 : 用来监视可能引起异常的语句,写程序 时,应该将可能出现异常的语句代码放入此语句块中。 lcatch语句:异常发生时要执行的异常处理程序,它 可以捕获到try语句块中抛出的异常对象,并可以 按人为的要求进行异常信息的输出。 l使用try catch语句,能保证程序发生异常时, 仍能执行完成。 异常的处理 try 和catch 是Java中用来处理异常的 关键字,其作用如下: l如果直到最后还是没有发现处理异常的catch 语句,那么在finally子句执行完后,调用 ThreadGroup的unCaughtException方法,
14、终止当前的线程(即发生了异常的线程)。 l如果希望在异常发生时能确保有一段代码被执 行,那么应该使用finally子句。这样即使发生 的异常与catch所能捕获的异常不匹配也会执行 finally子句, 异常的处理实例 【案例分析案例分析3】 public class ExceptionCase public static void main(String args) Patient p = new Patient(张三张三,0,10,支气管肺炎支气管肺炎); / 生成一个生成一个Patient对象对象 try/对挂号方法进行异常处理,此处必须处理异常对挂号方法进行异常处理,此处必须处理异常
15、p. registration ( ); catch (Wrong w)/ 捕获自定义异常对象捕获自定义异常对象w System.out.println(w); /输出自定义异常对输出自定义异常对 象象w的信息的信息 finally / finally 语句块总会执行语句块总会执行 System.out.println((温馨提示:请遵守医院规(温馨提示:请遵守医院规 定,先挂号,再看医生!)定,先挂号,再看医生!)); Doctor d= new Doctor(支气管肺炎支气管肺炎,60);/ 生成一生成一 个医生对象个医生对象 try/ 对治疗方法进行异常处理,此处必须要捕获异常对治疗方法
16、进行异常处理,此处必须要捕获异常 d.treatment(p); catch (Wrong w1) System.out.println(w1); finally System.out.println((温馨提示:只有正确的用药,才能保证病人的(温馨提示:只有正确的用药,才能保证病人的 生命安全!)生命安全!)); 异常的处理实例 运行结果为: 异常的处理实例 l如果将运行类(ExceptionCase)中的代码Patient p = new Patient(张三,0,10,支气管肺炎);修改为Patient p = new Patient(张三,10,支气管肺炎);即将标志变量id 的值改为
17、,说明已挂号,则程序运动结果为: 异常的处理实例 l如果再将用药量进行变化,修改运行类(ExceptionCase) 中的注释()处,将Doctor d= new Doctor(“支气管肺 炎”,60)改为Doctor d= new Doctor(“支气管肺炎”,45); 即将用药量改为45万单位每日,此时用药量范围正确,程序 运行结果为: 异常的处理 在某些情况下,同一段程序可能产生不 止一种异常情况。可以放置多个catch子 句来检查每一种异常类型,第一个与异常 匹配的catch就会被执行。如果一个异常 类和其子类都出现在catch子句中,应把 子类放在前面,否则将永远不会到达子类。 异常
18、的处理实例 public class ZeroAndOutofBound public static void main(String args) int a=new int3;/ 定义一个长度为的整型数组,注意数组下标是从定义一个长度为的整型数组,注意数组下标是从 开始的开始的 try System.out.println(a3);/ 输出数组中的第个元素,而数组实际长输出数组中的第个元素,而数组实际长 度为度为 System.out.println(1/0); catch (ArithmeticException e) System.out.println(程序出算术异常啦程序出算术异常啦
19、); System.out.println(e); catch(ArrayIndexOutOfBoundsException ea) /* 捕获数组下标越界异常,异常对象名为捕获数组下标越界异常,异常对象名为ea*/ System.out.println(程序出数组下标越界异常啦!程序出数组下标越界异常啦!); ea.printStackTrace();/调用异常的对象的调用异常的对象的printStackTrace()方法,输出异常对方法,输出异常对/象象ea的的 栈跟踪信息栈跟踪信息 System.out.println(程序执行完啦!程序执行完啦!); 异常的处理实例答案 请读者思考请读
20、者思考:程序为什么没有输出java.lang.ArithmeticException: / by zero等异常信息,如果将try中的代码改为 try System.out.println(1/0); System.out.println(a3); 结果又会怎样? throw语句 使用throw语句就可以明确地抛出一个异 常。throw是Java语言的关键字,用来告 知编译器此处要发生一个异常。throw后 面要跟一个异常类对象,用于指出异常的 名称和类型。 lthrow语句格式为: l ; l程序会在throw语句处立即终止,转向 trycatch寻找异常处理方法,不再执行 throw后面的
21、语句。 throws子句 throws用来表明一个方法可能抛出的各 种异常,并说明该方法会抛出但不捕获的 异 常 。 如 果 想 明 确 抛 出 一 个 RuntimeException或自定义异常类,就 必须在方法的声明语句中用throws子句来 表明它的类型,以便通知调用这个方法的 其他方法准备捕获它,这种情况一般需要 两个方法来分别抛出和处理异常。 throws子句 抛出异常的方法 l在抛出异常的方法中要使用throws子句, throws子句的格式为: l throws子句 【案例分析案例分析5】 public void registration ( ) throws Wrong /*
22、 (1) 挂号方法,此方法用throws Wrong抛出一个异 常,因此方法内部不作异常处理,而是交给此方法的调用者去 处理异常 */ if (id=0)/如果没挂号,抛出一个自定义异 常对象 throw new Wrong(您还没有挂号,请 先去挂号!);/ (2) System.out.println(您已挂号,请到医生处就 诊!); finally语句 当一个异常被抛出时,程序的执行就不 再是连续的了,会跳过某些语句,甚至会 由于没有与之匹配的catch子句而过早地 返回。有时要确保一段代码不管发生什么 异常都能被执行是必要的,关键字finally 就是用来标识这样一段代码的。不管是否
23、有异常发生,finally语句总是会执行。 finally语句 【案例分析案例分析6】 public static void main(String args) Patient p = new Patient(张三,0,10,支气管肺炎);/ (5)生成一个 Patient对象 try/ (6)对挂号方法进行异常处理,此处必须处理异常 p. registration ( ); catch (Wrong w)/ (7)捕获自定义异常对象w System.out.println(w); /输出自定义异常对象w的信息 finally / (8) finally 语句块总会执行 System.out.println((温馨提示:请遵守医院规定,先挂号, 再看医生!)); 自定义异常 要定义一个新的异常类,必须从一个现有的异常类继承,这 个父类最好在含义上与新异常类近似。 l自定义一个新的异常类,通常采用 Exce
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设立海外公司管理制度
- 设计开发变更管理制度
- 设计项目分级管理制度
- 诊所医保制度管理制度
- 诊疗科目各项管理制度
- 试验检测业务管理制度
- 财务销售流程管理制度
- 财政财务票据管理制度
- 货物搬运现场管理制度
- 货车安全生产管理制度
- 湖北黄冈历年中考作文题(2002-2023)
- GB/T 10810.1-2025眼镜镜片第1部分:单焦和多焦
- 2024年烟台市烟台山医院招聘考试真题
- 酒店前台培训内容
- 国开本科《人文英语3》期末机考总题库及答案
- 2025年包养合同模板
- 《SPE固相萃取技术》课件
- 高中数学复习 导数压轴大题归类 (原卷版)
- 环境友好型飞机内饰-深度研究
- 《crrt低血压的处理》课件
- 马诗听评课记录范文
评论
0/150
提交评论