




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第第7章章 Java接口、包和异常面向对象程序设计 前一页 休息2本章主要内容本章主要内容l接口接口l实现接口的类定义实现接口的类定义l接口的多态性接口的多态性l包及创建包包及创建包l类的包外引用类的包外引用l异常异常,不受检异常和受检异常不受检异常和受检异常l自定义异常类自定义异常类 前一页 休息3接口接口l C+语言中在定义一个类时,可以继语言中在定义一个类时,可以继承多个父类承多个父类 l多继承对内存开销较大,给系统的维多继承对内存开销较大,给系统的维护、移植带来极大的不便。护、移植带来极大的不便。 l Java不支持多继承不支持多继承 l考虑到在实际应用中,考虑到在实际应用中,Jav
2、a 引入接引入接口的概念。口的概念。Java支持一个类可以实现支持一个类可以实现一个或多个接口一个或多个接口 。 前一页 休息4接口概述l接口与类的差别接口与类的差别:l 类有它的成员变量和成员方法,接口是一组抽象方法和常量的集合。类有它的成员变量和成员方法,接口是一组抽象方法和常量的集合。可以认为接口是一种只有常量和抽象方法的特殊抽象类。在定义一个实现可以认为接口是一种只有常量和抽象方法的特殊抽象类。在定义一个实现接口的类时,一定要实现接口中协议规定的那些方法功能。接口的类时,一定要实现接口中协议规定的那些方法功能。 l 接口的意义接口的意义: 达到和达到和C+语言中多继承一样的目的,解决了
3、因多继承所带来的开销过语言中多继承一样的目的,解决了因多继承所带来的开销过大的问题。通过定义实现同一接口的类,描述了类要实现的功能框架,可大的问题。通过定义实现同一接口的类,描述了类要实现的功能框架,可以使不相关的类具有相同的行为以使不相关的类具有相同的行为 。l接口的作用与抽象类有些类似,但功能比抽象类强,使用也更方便。接口的作用与抽象类有些类似,但功能比抽象类强,使用也更方便。 接口 前一页 休息5方法协议方法协议 所谓方法协议,是指只有方法名和参数,方所谓方法协议,是指只有方法名和参数,方法返回类型,而没有方法体的一种说明格式法返回类型,而没有方法体的一种说明格式 它只体现方法的说明,但
4、不指定方法体,真它只体现方法的说明,但不指定方法体,真正的方法体是由实现接口的类来实现。正的方法体是由实现接口的类来实现。 与抽象方法的关系:抽象方法的方法体是由与抽象方法的关系:抽象方法的方法体是由子类实现的。子类实现的。 接口 前一页 休息6 接口的定义l接口定义包括接口的声明和接口体两部分,接口定义包括接口的声明和接口体两部分,其语法规则为:其语法规则为:l public interface接口名接口名 extends 父父接口列表接口列表 ll public static final 类型类型 常量名常量名=值;值;l public abstract 返回类型返回类型 接口方法名接口方
5、法名(形参表);(形参表);ll 前一页 休息7实现接口的类定义l实现接口的类定义:实现接口的类定义: 类访问控制修饰词类访问控制修饰词 class 类名类名 extends父类名父类名 implements接口接口列表列表类体类体例例7-1 前一页 休息8接口的多态性l在面向对象程序设计中,继承性和多在面向对象程序设计中,继承性和多态性是降低软件复杂性的有效技术。态性是降低软件复杂性的有效技术。 l通过使用多态,使系统更容易扩充。通过使用多态,使系统更容易扩充。 l改进软件开发的关键是软件重用,通改进软件开发的关键是软件重用,通过继承基本类和可用类库,带来软件过继承基本类和可用类库,带来软件
6、重用的最大效益。重用的最大效益。 接口 前一页 休息9 接口的多态性演示接口的多态性演示 演示实现接口的各相关类的多态演示实现接口的各相关类的多态性:性:Shape提供求图形面积提供求图形面积area协议协议的接口,类的接口,类Circle,Triangle和和ectangle依据各自情况,实现了接口依据各自情况,实现了接口Shape的的area方法,因此,不同对象方法,因此,不同对象的求图形面积形式各异,形成多态性。的求图形面积形式各异,形成多态性。 例例7-3 前一页 休息10 包(package)l包是对类和接口进行组织和管理的目包是对类和接口进行组织和管理的目录结构。录结构。 l Ja
7、va 包可以视为存储相关类和接口包可以视为存储相关类和接口的容器。的容器。l包的另外一个好处是它提供了包的另外一个好处是它提供了“唯一唯一类名类名”的约定的约定 前一页 休息11 创建包l包的层次结构名是类访问名的一部分,包的层次结构名是类访问名的一部分,必须在程序中通过必须在程序中通过package语句指定。语句指定。l包的定义格式如下:包的定义格式如下: package 包名包名1.包名包名; 其中,其中,package是关键字,包名是关键字,包名1.包名包名为层次结构包名,用圆点为层次结构包名,用圆点.分隔每个包。分隔每个包。 l创建可复用的类的步骤:创建可复用的类的步骤: 1)定义一个
8、)定义一个public类,如果不是类,如果不是public类,类,它只能被同一包中的其它类引用;它只能被同一包中的其它类引用; 2)选择层次结构包名,并用)选择层次结构包名,并用package语句语句将其加到可复用类的源代码文件中的第一行,将其加到可复用类的源代码文件中的第一行,指明该类所在的包;注意:此时,第一行不能指明该类所在的包;注意:此时,第一行不能是空行或注释。是空行或注释。 3)编译这个类,并放到指定的)编译这个类,并放到指定的classpath下,作为顶层包的父目录中。例如,指定下,作为顶层包的父目录中。例如,指定classpath为为c: j2sdk1.4.1_02 jrecl
9、asses。classes目录在缺省时不存在,必须在第一个目录在缺省时不存在,必须在第一个要放到该路径中的类之前创建它。创建要放到该路径中的类之前创建它。创建classes目录的目录的DOS命令:命令:l C : md c: j2sdk1.4.1_02jreclasses 前一页 休息13类的包外引用l 1. import 语句语句 import 语句的语法语句的语法: import 包名包名1.包名包名.类名类名/ * ; 其中,其中,importimport是关键字,包名是关键字,包名1.1.包名包名为层次结构包为层次结构包名,用圆点名,用圆点. .分隔每个包。分隔每个包。* * 表示引入
10、指定包中的所有的类。表示引入指定包中的所有的类。l 2直接使用类的访问名直接使用类的访问名l直接使用类的访问名指出要引入,重用的类,直接使用类的访问名指出要引入,重用的类,类访问名包括层次结构包名和类名两部分:类访问名包括层次结构包名和类名两部分: 包名包名1.包名包名.类名类名l 包l例如,在定义例如,在定义Time类继承类继承com.juj.Time1类时,用两种方法引入类时,用两种方法引入Time1类类: import com.juj.Time1; class Time extends Time1; 或 class Time extends com.juj.Time1;l例例7.5 供重
11、用的供重用的Point类,源程序在类,源程序在d:jujava中,编译存放中,编译存放在在com.juj包中。包中。lpackage com.juj;lpublic class Pointlprivate int x,y; /私有成员变量私有成员变量l/重载的构造方法重载的构造方法lpublic Point()lpublic Point(int x,int y) this.x=x;this.y=y;l/其它成员方法其它成员方法lpublic void setx(int a)x=a;lpublic int getx( )return x;lpublic void sety(int a) y=a;
12、lpublic int gety( )return y;ll将将Point 类编译类编译,并存于并存于classpath为为c: j2sdk1.4.1_02jreclasses的的com.juj包中,使用编译命令:包中,使用编译命令:lD:jujava javac d c:j2sdk1.4.1_02jreclasses Point.javal/MDPoint2.java主类,存放在无名包主类,存放在无名包(即当前目录(即当前目录d:jujava)中。)中。l import com.juj.Point;lpublic class MDPoint2lpublic static void main(
13、String args)lPoint a=new Point();lPoint p=new Point(3,5);lp.setx(6);lSystem.out.println( p 点间的点间的 x,y 坐标为坐标为: +p.getx()+,+p.gety();lSystem.out.println( a 点间的点间的 x,y 坐标为坐标为: +a.getx()+,+a.gety();lll运行结果运行结果:lp 点间的点间的 x,y 坐标为坐标为: 6,5la 点间的点间的 x,y 坐标为坐标为: 0,0 前一页 休息20异常的基本概念 异常(异常(Exception)是指应用程)是指应用程
14、序在运行过程中发生的不正常情况,序在运行过程中发生的不正常情况,或发生错误(或发生错误(Error)。用任何计算机)。用任何计算机程序设计语言编写的程序,在运行过程序设计语言编写的程序,在运行过程中都不可避免地可能出现各种各样程中都不可避免地可能出现各种各样的异常现象。如被零除,数组下标超的异常现象。如被零除,数组下标超界,访问的文件或对象不存在,内存界,访问的文件或对象不存在,内存不够等等。程序运行中的异常可以预不够等等。程序运行中的异常可以预料但不可避免。料但不可避免。 异常处理 前一页 休息21异常的基本概念 Java将程序运行过程中发生异常抽象成将程序运行过程中发生异常抽象成类,每个异
15、常类代表一个相应的异常,类类,每个异常类代表一个相应的异常,类中包含异常信息和异常处理方法。中包含异常信息和异常处理方法。 应用程序在运行过程中如果发生异常应用程序在运行过程中如果发生异常事件,事件,Java虚拟机或正在运行程序捕获异虚拟机或正在运行程序捕获异常,创建并抛出一个异常对象,生成的异常,创建并抛出一个异常对象,生成的异常对象将由常对象将由JVM解析处理,称解析处理,称“抛出异常抛出异常”机制,确保不会死机,从而保证系统的安机制,确保不会死机,从而保证系统的安全性。全性。 Java“抛出异常抛出异常”机制将异常处理与正机制将异常处理与正常程序分离,易于维护,程序更为简洁。常程序分离,
16、易于维护,程序更为简洁。 异常处理 前一页 休息22 Java中异常对象的类型和层中异常对象的类型和层次结构次结构l在在Java中所有的异常都是类中所有的异常都是类Throwable的后继子类。的后继子类。l类类Throwable有两个直接子类:有两个直接子类:Error类和类和Exception类。类。lException类的子类分两类:类的子类分两类: 受检异常(受检异常(checked Exception) 不受检异常(不受检异常(unchecked RuntimeException and Error)。)。 l 异常处理 前一页 休息23 不受检异常不受检异常l不受检异常有:不受检异
17、常有:ljava.lang.ArithmeticException算术运算异常,如被零除等算术运算异常,如被零除等ljava.lang.ArrayIndexOutOfBoundsException数组下标超界异常数组下标超界异常ljava.lang.StringIndexOutOfBoundsException字符串下标超界异常字符串下标超界异常ljava.lang.ClassCastException类型转换异常类型转换异常ljava.lang.NegativeArraySizeException数组大小为负数异常数组大小为负数异常 前一页 休息24 l例例77 不受检异常的例子。不受检异常
18、的例子。lclass ExceptionDemo0l public static void main(String args)lint a=5,0,4,10;int m=100;double d;lfor(int i=0;ia.length;i+)ld=m/ai;/被零除的异常被零除的异常!lSystem.out.println(程序运行结束程序运行结束!);lll例例78 用用try-catch结构检测、处理不受检异常。结构检测、处理不受检异常。lclass ExceptionDemo1lpublic static void main(String args)ll int a=5,0,4,1
19、0;l int m=100;lfor(int i=0;i0)System.out.println(平方根平方根为为: +x+,+Math.sqrt(x);lll D: IfElseDemo1.java:10: unreported exception java.io.IOException; must be caught or declared to be thrownx=(byte)System.in.read(); 1 errorl该例程序的该例程序的main方法使用了输入方法使用了输入/输出处理类,输出处理类,要求程序监视输入要求程序监视输入/输出异常,当删去输出异常,当删去throws
20、子句时,编译出错,不能通过。如将程序修改,子句时,编译出错,不能通过。如将程序修改,增加增加throws子句监视异常子句监视异常 ,则编译通过,程,则编译通过,程序可正常运行。序可正常运行。 前一页 休息32 异常处理机制l可以用三种方法处理程序可能发生的异可以用三种方法处理程序可能发生的异常。常。l (1)程序内部处理和)程序内部处理和try-catch结构结构l (2)抛出异常外部处理和)抛出异常外部处理和throws子句子句l (3)程序内部处理和外部处理两者结)程序内部处理和外部处理两者结合和合和throw语句语句 前一页 休息33程序内部处理和程序内部处理和try-catch结结构构
21、l ltry-catch结构的语法:结构的语法:ltry/可能发生不受检异常类型可能发生不受检异常类型lcatch(异常类(异常类1 异常实例异常实例1 )l/捕获并处理异常类捕获并处理异常类1的异常的异常lcatch(异常类(异常类2 异常实例异常实例2 )l/捕获并处理异常类捕获并处理异常类2的异常的异常ll finally/异常终结处理异常终结处理 异常处理机制l例例710 一个不受检异常(数组下标超界)程序内部处理的例子,一个不受检异常(数组下标超界)程序内部处理的例子,演示演示try-Catch结构执行流程。结构执行流程。lclass ArrayTestElpublic static
22、 void main(String args)lint i;int a=new int5;ltrylfor( i=0;i=0;i-)lSystem.out.print( a+i+ = +ai+ );llSystem.out.println( n程序运行结束!程序运行结束!);lll运行结果运行结果: 异常异常数组下标超界!数组下标超界! a4 = 10 a3 = 8 a2 = 6 a1 = 4 a0 = 2 程序运行结束!程序运行结束! 前一页 休息36抛出异常外部处理和抛出异常外部处理和throws子子句句l 用用throws子句将可能发生的受检异常作为异子句将可能发生的受检异常作为异常对象
23、抛出,由相应的异常处理方法进行处理。常对象抛出,由相应的异常处理方法进行处理。当一个受检异常对象抛出后,该异常对象沿着当一个受检异常对象抛出后,该异常对象沿着调用栈向后传播,直至找到相应的异常处理方调用栈向后传播,直至找到相应的异常处理方法处理为止。法处理为止。lthrows子句出现在方法的声明中,列出可子句出现在方法的声明中,列出可以由方法抛出的异常对象,例如,以由方法抛出的异常对象,例如,lpublic int g(float h)throws a,b,cl 方法体方法体;l 异常处理机制 l例例 711 一个受检异常外部处理的例子。一个受检异常外部处理的例子。limport java.io.*;lpublic class IfElseDemo1lpublic static void main(St
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基础语文知识课程
- 卫生健康教育防治春季传染病
- 初中生应了解的理财知识
- 投标部门职责培训
- 机动车辆报废与维修协议
- 合同签订后的注意事项
- 外贸合同附加协议
- 本地化服务分包合同
- 利息递增的借款协议
- 呼吸衰竭专科培训课件
- 山东省2024年夏季普通高中学业水平合格考试地理试题02(解析版)
- 2024版北京市家庭居室装饰装修工程施工合同
- 山东省人工智能融合创新职业技能竞赛(人工智能训练师)试题及答案
- Classroom English英文课堂用语
- 立体几何解答题罕见压轴难题(解析版)
- 13J933-2体育场地与设施(二)
- 温室大棚租赁合同标准范本
- 箱式变电站吊装方案设计规范
- MOOC 走进舞蹈艺术-首都师范大学 中国大学慕课答案
- AED急救知识课件
- 2023版《思想道德与法治》(绪论-第一章)绪论 担当复兴大任 成就时代新人;第一章 领悟人生真谛 把握人生方向 第3讲 创造有意义的人生
评论
0/150
提交评论