Java语言程序设计实验指导电子教案第06章.pptx

上传人:莉*** 文档编号:73647912 上传时间:2023-02-21 格式:PPTX 页数:16 大小:126.03KB
返回 下载 相关 举报
Java语言程序设计实验指导电子教案第06章.pptx_第1页
第1页 / 共16页
Java语言程序设计实验指导电子教案第06章.pptx_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《Java语言程序设计实验指导电子教案第06章.pptx》由会员分享,可在线阅读,更多相关《Java语言程序设计实验指导电子教案第06章.pptx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、6.1 Java6.1 Java中的包中的包 包(包(packagepackage)是类的容器,用来保存划)是类的容器,用来保存划分的类名空间。包以分层方式保存并被明确地分的类名空间。包以分层方式保存并被明确地引入新的类定义。本节将对引入新的类定义。本节将对JavaJava中包的相关中包的相关问题进行讨论。问题进行讨论。6.1.1 6.1.1 包的创建包的创建6.1.2 6.1.2 关于类路径关于类路径6.1.3 6.1.3 一个简单的例子一个简单的例子6.1.4 6.1.4 访问保护访问保护6.1.5 6.1.5 包的导入包的导入Return第1页/共16页6.1.1 6.1.1 包的创建包

2、的创建 JavaJava提提供供了了把把类类名名空空间间划划分分为为更更多多易易管管理理的的块块的的机机制制,这这种种机机制制就就是是包包。包包既既是是命命名名机机制制也也是是可可见见度度控控制制机机制制。我我们们可可以以在在包包内内定定义义类类,而而且且在包外的代码不能访问该类。这使得各个类之间有隐私,但不被外界所知。在包外的代码不能访问该类。这使得各个类之间有隐私,但不被外界所知。创创建建一一个个包包是是很很简简单单的的:只只要要包包含含一一个个packagepackage命命令令作作为为一一个个JavaJava源源文文件件的的第第一一句句就就可可以以了了。该该文文件件中中定定义义的的任任

3、何何类类将将属属于于指指定定的的包包。packagepackage语语句句定定义义了了一一个个存存储储类类的的名名字字空空间间。如如果果省省略略package package 语语句句,类类名名被被输输入入一一个个默默认认的的没没有有名名称称的的包包(这这是是为为什什么么在在以以前前不不用用担担心心包包的的问问题题的的原原因因)。尽尽管管默默认认包包对对于于短短例例程程序序很很好好用用,但但对对于于实实际际的的应应用用程程序序是是不不适适当当的的。多多数数情情况况,需需要要为为自自己己的的代代码码定定义义一一个个包包。下下面面是是packagepackage声声明明的的一一般般形形式:式:pa

4、ckagepkg;packagepkg;这这里里,pkgpkg为为包包名名。JavaJava用用文文件件系系统统目目录录来来存存储储包包。记记住住这这种种规规则则是是很很重重要要的的,目目录录名名称称必必须须和和包包名名严严格格匹匹配配。多多个个文文件件可可以以包包含含相相同同packagepackage声声明明。packagepackage声声明明仅仅仅仅指指定定了了文文件件中中所所定定义义的的类类属属于于哪哪一一个个包包。它它不不拒拒绝绝其其他他文文件件的的其其他他方方法法成成为为相相同同包包的的一一部部分分。多多数数实实际际的的包包伸伸展展到到很很多多文文件件。我我们们可可以以创创建建包

5、包层层次次。为为做做到到这这点点,只只要要将将每每个个包包名名与与它它的的上上层层包包名名用点号用点号“.”分隔开就可以了。一个多级包的声明的通用形式如下:分隔开就可以了。一个多级包的声明的通用形式如下:packagepkg1.pkg2.pkg3;packagepkg1.pkg2.pkg3;包层次一定要在包层次一定要在JavaJava开发系统的文件系统中有所反映。开发系统的文件系统中有所反映。Return第2页/共16页6.1.2 6.1.2 关于类路径关于类路径 假假设设你你在在一一个个testtest包包中中创创建建了了一一个个名名为为PackTest PackTest 的的类类。由由于于

6、你你的的目目录录结结构构必必须须与与包包相相匹匹配配,创创建建一一个个名名为为testtest的的目目录录并并把把装装入入该该目目录录。然然后后,使使test test 成成为为当当前前目目录录并并编编译译。这这导导致致被被存存放放在在testtest目目录录下下。当当 试试 图图 运运 行行 PackTestPackTest时时,java java 解解 释释 器器 报报 告告 一一 个个 与与“不不 能能 发发 现现PackTestPackTest类类”相相似似的的错错误误消消息息。这这是是因因为为该该类类现现在在被被保保存存在在testtest包包中中,不不再再能能简简单单用用PackT

7、estPackTest来来引引用用。必必须须通通过过列列举举包包层层次次来来引引用用该该类类。引引用用包包层层次次时时用用点点号号将将包包名名隔隔开开。该该类类现现在在必必须须叫叫做做test.PackTesttest.PackTest。然然而而,如如果果你你试试图图用用test.PackTesttest.PackTest,将将仍仍然然收收到到一一个个与与“不不能能发发现现test/PackTesttest/PackTest类类”相似的出错消息。相似的出错消息。仍仍然然收收到到错错误误消消息息的的原原因因隐隐藏藏在在类类路路径径变变量量中中。记记住住,类类路路径径设设置置顶顶层层类类层层次次。

8、问问题题在在于于在在当当前前工工作作目目录录下下不不存存在在testtest子子目目录录,因因为为你你此此时时是是工工作作在在testtest目目录录。在在这这个个问问题题上上你你有有两两个个选选择择:改改变变目目录录到到上上一一级级然然后后用用,或或者者在在类类路路径径环环境境变变量量增增加加开开发发类类层层次次结结构构的的顶顶层层。然然后后就就可可以以使使用用了了。例例如如,如如果果源源代代码码在在目目录录C:myjavaC:myjava下下,那那么么应应设设置类路径为:置类路径为:.;C:myjava;C:javaclasses.;C:myjava;C:javaclasses.;C:my

9、java;C:javaclasses.;C:myjava;C:javaclasses Return第3页/共16页6.1.3 6.1.3 一个简单的例子一个简单的例子 详细分析并运行教材详细分析并运行教材P156157P156157页使页使用包的例子。用包的例子。Return第4页/共16页6.1.4 6.1.4 访问保护访问保护 在前面的章节中已经学习了在前面的章节中已经学习了JavaJava的访问控制机制和访问的访问控制机制和访问说明符。例如,我们已经知道一个类的说明符。例如,我们已经知道一个类的privateprivate成员仅可以被成员仅可以被该类的其他成员访问。包增加了访问控制的另一

10、个维度。正如该类的其他成员访问。包增加了访问控制的另一个维度。正如读者所看到的,读者所看到的,JavaJava提供很多级别的保护以使在类、子类和包提供很多级别的保护以使在类、子类和包中有完善的访问控制。中有完善的访问控制。类和包都是封装和容纳名称空间和变量及方法范围的方法。包就像盛装类和下级包的容器。类就像是数据和代码的容器。类是Java的最小的抽象单元。因为类和包的相互影响,Java将类成员的可见度分为四个种类:l相同包中的子类 l相同包中的非子类 l不同包中的子类 l既不在相同包又不在相同子类中的类 三个访问控制符,private、public和protected,提供了多种方法来产生这些

11、种类所需访问的多个级别,教材P158页表6-1中总结了它们之间的相互作用。1 1关于访问保护关于访问保护第5页/共16页分析教材P158160页的例子,该例显示了访问修饰符的所有组合,在该例中有两个包和五个类。记住,这两个不同包中的类需要被存储在以它们的包p1、p2命名的目录下。第一个包中定义了三个类:Protection,Derived,和 SamePackage。第一个类以合法的保护模式定义了四个int变量。变量n声明成默认受保护型。n_pri是private型,n_pro是protected,n_pub是public的。该例中每一个后来的类试图访问该类一个实例中的变量。根据访问权限不编译

12、的行用单行注释/。在每个这样的行之前都是列举该级保护将允许访问的地点的注释。第二个类,Derived是同样包p1中Protection类的子类,这允许Derived访问Protection中的除n_pri以外的所有变量,因为它是private。第三个类,SamePackage,不是Protection的子类,但是是在相同的包中,也可以访问除n_pri以外的所有变量。Return2 2一个访问的例子一个访问的例子第6页/共16页6.1.5 6.1.5 包的导入包的导入 包包的的存存在在是是划划分分不不同同类类的的好好的的机机制制,了了解解为为什什么么所所有有JavaJava内内部部的的类类都都存

13、存在在包包中中是是很很简简单单的的。在在未未命命名名的的默默认认包包中中,不不存存在在核核心心JavaJava类类;所所有有的的标标准准类类都都存存储储在在相相同同的的包包中中。既既然然包包中中的的类类必必须须包包含含它它们们的的包包名名才才能能完完全全有有效效,为为每每个个想想用用的的包包写写一一个个长长的的逗逗点点分分离离的的包包路路径径名名是是枯枯燥燥的的。因因为为这这点点,JavaJava包包含含了了importimport语语句句来来引引入入特特定定的的类类甚甚至至是是整整个个包包。一一旦旦被被引引入入,类类可可以以被被直直呼呼其其名名的的引引用用。importimport语语句句对

14、对于于程程序序员员是是很很方方便便的的,而而且且在在技技术术上上并并不不需需要要编编写写完完整整的的JavaJava程程序序。如如果果你你在在程程序序中中将将要要引用若干个类,那么用引用若干个类,那么用import import 语句将会节省很多打字时间。语句将会节省很多打字时间。在在 JavaJava源源 程程 序序 文文 件件 中中,importimport语语 句句 紧紧 接接 着着 packagepackage语语 句句(如如 果果package package 语语句句存存在在),它它存存在在于于任任何何类类定定义义之之前前。下下面面是是importimport声声明明的一般形式的一

15、般形式importpkg1.pkg2.(classname|*);importpkg1.pkg2.(classname|*);这这里里,pkg1pkg1是是顶顶层层包包名名,pkg2pkg2是是在在外外部部包包中中的的用用逗逗点点(.)隔隔离离的的下下级级包包名名。除除非非是是文文件件系系统统的的限限制制,不不存存在在对对于于包包层层次次深深度度的的实实际际限限制制。最最后后,要要么么指指定定一一个个清清楚楚的的类类名名,要要么么指指定定一一个个星星号号(*),该该星星号号表表明明JavaJava编译器应该引入整个包。编译器应该引入整个包。分析教材分析教材P161162P161162页的例子。

16、页的例子。Return第7页/共16页6.2 6.2 接口接口 在前面的章节中,我们已知道如何在在前面的章节中,我们已知道如何在类中定义接口的方法。通过使用关键字类中定义接口的方法。通过使用关键字interfaceinterface,JavaJava允许编程人员充分抽象它允许编程人员充分抽象它实现的接口。接口自己不定义任何实现,实现的接口。接口自己不定义任何实现,尽管它与抽象类相似。尽管它与抽象类相似。6.2.1 6.2.1 关于接口关于接口6.2.2 6.2.2 接口的定义接口的定义6.2.3 6.2.3 接口的实现接口的实现6.2.4 6.2.4 接口的使用接口的使用6.2.5 6.2.5

17、 接口中的变量接口中的变量6.2.6 6.2.6 接口的扩展接口的扩展Return第8页/共16页6.2.1 6.2.1 关于接口关于接口 接接口口是是用用来来实实现现类类间间多多重重继继承承的的功功能能的的,它它将将完完成成特特定定功功能能的的若若干干属属性性组组织织成成相相对对独独立立的的属属性性集集合合,该该属属性性集集合合就就是是接接口口。例例如如,ActionListenerActionListener接接口口的的功功能能与与actionPerformed()actionPerformed()方法相关。方法相关。需需要要指指出出的的是是,接接口口定定义义的的仅仅仅仅是是实实现现某某一

18、一特特定定功功能能的的一一组组功功能能的的对对外外接接口口和和规规范范,而而并并没没有有真真正正实实现现这这个个功功能能。真真正正实实现现在在继继承承这这个个接接口口的的各各个个类类中中完完成成,因而通常把接口功能的继承称为因而通常把接口功能的继承称为“实现实现”。如果一个类要实现接口时,需要注意以下几个方面的内容:如果一个类要实现接口时,需要注意以下几个方面的内容:(1 1)在类的声明部分,用)在类的声明部分,用implementsimplements关键字声明该类将要实现哪些接口。关键字声明该类将要实现哪些接口。(2 2)如如果果实实现现某某接接口口的的类类不不是是abstractabst

19、ract的的抽抽象象类类,则则在在类类的的定定义义部部分分必必须须实实现现指定接口的所有抽象方法。指定接口的所有抽象方法。(3 3)如如果果实实现现某某接接口口的的类类是是abstractabstract的的抽抽象象类类,则则它它可可以以不不实实现现该该接接口口所所有有的的方方法法。但但是是对对于于这这个个抽抽象象类类任任何何一一个个非非抽抽象象的的子子类类面面言言,它它们们父父类类所所实实现现的的接接口口中的所有抽象方法都必须有实在的方法体。中的所有抽象方法都必须有实在的方法体。(4 4)一一个个类类在在实实现现某某接接口口的的抽抽象象方方法法时时,必必须须使使用用完完全全相相同同的的方方法

20、法头头,如如果果所所实实现现的的方方法法与与抽抽象象方方法法有有相相同同的的方方法法名名和和不不同同的的参参数数列列表表,则则只只是是在在重重载载一一个个新新的的方法,而不是实现已有的抽象方法。方法,而不是实现已有的抽象方法。(5 5)接口的抽象方法的访问限制符都已指定为)接口的抽象方法的访问限制符都已指定为publicpublic,所以类在实现方法时,所以类在实现方法时,必须显式地使用必须显式地使用publicpublic修饰符,否则将被系统警告为缩小了接口中定义的方法的修饰符,否则将被系统警告为缩小了接口中定义的方法的访问控制范围。访问控制范围。Return第9页/共16页6.2.2 6.

21、2.2 接口的定义接口的定义 用用关关键键字字interfaceinterface,你你可可以以从从类类的的实实现现中中抽抽象象一一个个类类的的接接口口。接接口口在在语语句句构构成成上上与与类类相相似似,但但是是它它们们缺缺少少实实例例变变量量,而而且且它它们们定定义义的的方方法法是是不不含含方方法法体体的的。实实际际上上,这这意意味味着着你你可可以以定定义义不不用用假假设设它它们们怎怎样样实实现现的的接接口口。一一旦旦接接口口被被定定义义,任任何何类类成成员员可可以以实实现现一一个个接接口口。而而且且,一一个个类类可可以以实实现现多个接口。多个接口。要要实实现现一一个个接接口口,接接口口定定

22、义义的的类类必必须须创创建建完完整整的的一一套套方方法法。然然而而,每每个个类类都都可可以以自自由由地地决决定定它它们们自自己己实实现现的的细细节节。通通过过提提供供interfaceinterface关关键键字字,JavaJava允许你充分利用多态性的允许你充分利用多态性的“一个接口,多个方法一个接口,多个方法”。接接口口是是为为支支持持运运行行时时动动态态方方法法解解决决而而设设计计的的。接接口口的的定定义义很很像像类类的的定定义义。下面是一个接口的通用形式。下面是一个接口的通用形式。accessinterfacenameaccessinterfacenamereturn-typemeth

23、od-name1(parameter-list);return-typemethod-name1(parameter-list);return-typemethod-name2(parameter-list);return-typemethod-name2(parameter-list);typefinal-varname1=value;typefinal-varname1=value;typefinal-varname2=value;typefinal-varname2=value;/./.return-typemethod-nameN(parameter-list);return-type

24、method-nameN(parameter-list);typefinal-varnameN=value;typefinal-varnameN=value;Return这里,access要么是public,要么就没有用修饰符。当没有访问修饰符时,则是默认访问范围,而接口是包中定义的唯一的可以用于其他成员的东西。当它声明为public时,接口可以被任何代码使用。name是接口名,它可以是任何合法的标识符。注意定义的方法没有方法体。它们以参数列表后面的分号作为结束。它们本质上是抽象方法;在接口中指定的方法没有默认的实现。每个包含接口的类必须实现所有的方法。接口声明中可以声明变量。它们一般是fin

25、al和static型的,意思是它们的值不能通过实现类而改变。它们还必须以常量值初始化。如果接口本身定义成public,所有方法和变量都是public的。下面是一个接口定义的例子。它声明了一个简单的接口,该接口包含一个带单个整型参数的callback()方法。interfaceCallbackvoidcallback(intparam);第10页/共16页6.2.3 6.2.3 接口的实现接口的实现 一一旦旦接接口口被被定定义义,一一个个或或多多个个类类可可以以实实现现该该接接口口。为为实实现现一一个个接接口口,在在类类定定义义中中包包括括implements implements 子子句句,然

26、然后后创创建建接接口口定定义的方法。一个包括义的方法。一个包括implements implements 子句的类的一般形式如下:子句的类的一般形式如下:accessclassclassnameextendssuperclassaccessclassclassnameextendssuperclassimplementsimplements interfaceinterface,interface.,interface./class-body/class-body 这里,这里,accessaccess要么是要么是publicpublic的,要么是没有修饰符的。如的,要么是没有修饰符的。如果一个

27、类实现多个接口,这些接口被逗号分隔。如果一个类实果一个类实现多个接口,这些接口被逗号分隔。如果一个类实现两个声明了同样方法的接口,那么相同的方法将被其中任一现两个声明了同样方法的接口,那么相同的方法将被其中任一个接口客户使用。实现接口的方法必须声明成个接口客户使用。实现接口的方法必须声明成publicpublic。而且,。而且,实现方法的类型必须严格与接口定义中指定的类型相匹配。实现方法的类型必须严格与接口定义中指定的类型相匹配。第11页/共16页 我我们们可可以以把把变变量量定定义义成成使使用用接接口口的的对对象象引引用用而而不不是是类类的的类类型型。任任何何实实现现了了所所声声明明接接口口

28、的的类类的的实实例例都都可可以以被被这这样样的的一一个个变变量量引引用用。当当通通过过这这些些引引用用调调用用方方法法时时,在在实实际际引引用用接接口口的的实实例例的的基基础础上上,方方法法被被正正确确调调用用。这这是是接接口口的的最最显显著著特特性性之之一一。被被执执行行的的方方法法在在运运行行时时动动态态操操作作,允允许许在在调调用用方方法法代代码码后后创创建建类类。调调用用代代码码在在完完全全不不知知“调调用用者者”的的情情况况下下可可通通过过接接口口来来调调度度。这这个个过过程程和和前前面面章节中描述的用超类引用来访问子类对象很相似。章节中描述的用超类引用来访问子类对象很相似。Retu

29、rn 1 1通过接口引用实现接口通过接口引用实现接口 2 2局部实现局部实现如果一个类包含一个接口但是不完全实现接口定义的方法,那么该类必须定义成abstract型。例如:abstractclassIncompleteimplementsCallbackinta,b;voidshow()System.out.println(a+b);/.第12页/共16页6.2.4 6.2.4 接口的使用接口的使用 为为理理解解接接口口的的功功能能,让让我我们们看看一一个个更更实实际际的的例例子子。我我们们曾曾开开发发过过一一个个名名为为StackStack的的类类,该该类类实实现现了了一一个个简简单单的的固

30、固定定大大小小的的堆堆栈栈。然然而而,有有很很多多方方法法可可以以实实现现堆堆栈栈。例例如如,堆堆栈栈的的大大小小可可以以固固定定也也可可以以不不固固定定。堆堆栈栈还还可可以以保保存存在在数数组组、链链表表和和二二进进制制树树中中等等。无无论论堆堆栈栈怎怎样样实实现现,堆堆栈栈的的接接口口保保持持不不变变。也也就就是是说说,push()push()和和pop()pop()方方法法定定义义了了独独立立实实现现细细节节的的堆堆栈栈的的接接口口。因因为为堆堆栈栈的的接接口口与与它它的的实实现现是是分分离离的的,很很容容易易定定义义堆堆栈栈接接口口,而而不不用用管管每每个个定定义义实实现现细细节节。让

31、我们看下面的例子。让我们看下面的例子。下下面面定定义义了了一一个个整整数数堆堆栈栈接接口口,把把它它保保存存在在一一个个IntStack.javaIntStack.java文件中。该接口将被两个堆栈实现使用。文件中。该接口将被两个堆栈实现使用。/Defineanintegerstackinterface./Defineanintegerstackinterface.interfaceIntStackinterfaceIntStackvoidpush(intitem);/storeanitemvoidpush(intitem);/storeanitemintpop();intpop();/ret

32、rieveanitem/retrieveanitem 详细情况见教材详细情况见教材详细情况见教材详细情况见教材P168169P168169页。页。页。页。Return第13页/共16页6.2.5 6.2.5 接口中的变量接口中的变量 你你可可以以使使用用接接口口来来引引入入多多个个类类的的共共享享常常量量,这这样样做做只只需需要要简简单单地地声声明明包包含含变变量量初初始始化化想想要要的的值值的的接接口口就就可可以以了了。如如果果一一个个类类中中包包含含那那个个接接口口(就就是是说说当当你你实实现现了了接接口口时时),所所有有的的这这些些变变量量名名都都将将作作为为常常量量看看待待。这这与与在

33、在C/C+C/C+中中用用头头文文件件来来创创建建大大量量的的#defined#defined 常常量量或或const const 声声明明相相似似。如如果果接接口口不不包包含含方方法法,那那么么任任何何包包含含这这样样接接口口的的类类实实际际并并不不实实现现什什么么。这这就就像像类类在在类名字空间引入这些常量作类名字空间引入这些常量作finalfinal变量。变量。教材教材P170171P170171页页的例子运用了这种技术来实现的例子运用了这种技术来实现一个自动的一个自动的“作决策者作决策者”,下面我们来分析该例子。,下面我们来分析该例子。Return第14页/共16页6.2.6 6.2.6 接口的扩展接口的扩展 接口可以通过运用关键字接口可以通过运用关键字extendsextends被被其他接口继承。语法与继承类是一样的。其他接口继承。语法与继承类是一样的。当一个类实现一个继承了另一个接口的接当一个类实现一个继承了另一个接口的接口时,它必须实现接口继承链表中定义的口时,它必须实现接口继承链表中定义的所有方法。教材所有方法。教材P171172P171172页给出了页给出了一个例一个例子。分析该例子。子。分析该例子。Return第15页/共16页感谢您的观看!第16页/共16页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁