1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
list09

第9章 包 和 接 口 本章我们讲述Java最具有革新性的两个特点:包和接口。包(package)是类的容器,用来保存划分的类名空间。例如,一个包允许你创建一个名为List的类,你可以把它保存在你自己的包中而不用考虑和其他地方的某个名为List的类相冲突。包以分层方式保存并被明确的引入新的类定义。 在前面的章节你已经了解了怎样在类中定义数据接口的方法。通过运用关键字interface,Java允许你充分抽象它实现的接口。用接口,你可以定义一系列的被一个类或多个类执行的方法。接口自己不定义任何实现。尽管它们与抽象类相似,接口有一个特殊的功能:类可以实现多个接口。与之相反,类只能继承一个超类(抽象类或其他)。 包和接口是Java程序的两个基本组成。一般来说,Java源程序可以包含下面的四个内部部分的任何一个(或所有)。 · 单个接口声明(可选) · 任意数目的引入语句(可选) · 单个公共类声明(必须) · 对包来说是私有的任意数目的类(可选) 其中只有一个——单个公共类声明——在前面的程序中被用到。本章将探究剩下的三个部分。 9.1 包 在前面的章节,每个例题类名从相同的名称空间获得。意思是说为避免名称冲突每个类都必须用惟一的名称。下面,没有管理名称空间的办法,你可能觉得不方便,因为每个单独的类都有描述性的名称。你还需要有确保你选用的类名是独特的且不和其他程序员选择的类名相冲突的方法(假想一小组程序员为用“Foobar”作类名而争斗。或者,设想整个Internet团体为谁最先为类取名为“Espresso”而争论)。感谢上帝,Java提供了把类名空间划分为更多易管理的块的机制。这种机制就是包。包既是命名机制也是可见度控制机制。你可以在包内定义类,而且在包外的代码不能访问该类。这使你的类相互之间有隐私,但不被其他世界所知。 9.1.1 定义包 创建一个包是很简单的:只要包含一个package命令作为一个Java源文件的第一句就可以了。该文件中定义的任何类将属于指定的包。package语句定义了一个存储类的名字空间。如果你省略package 语句,类名被输入一个默认的没有名称的包(这是为什么在以前你不用担心包的问题的原因)。尽管默认包对于短的例子程序很好用,但对于实际的应用程序它是不适当的。多数情况,需要为自己的代码定义一个包。 下面是package 声明的通用形式: package pkg; 这里,pkg 是包名。例如,下面的声明创建了一个名为MyPackage的包。 package MyPackage; Java用文件系统目录来存储包。例如,任何你声明的MyPackage中的一部分的类的.class文件被存储在一个MyPackage 目录中。记住这种情况是很重要的,目录名必须和包名严格匹配。 多个文件可以包含相同package声明。package声明仅仅指定了文件中定义的文件属于哪一个包。它不拒绝其他文件的其他方法成为相同包的一部分。多数实际的包伸展到很多文件。 你可以创建包层次。为做到这点,只要将每个包名与它的上层包名用点号“.”分隔开就可以了。一个多级包的声明的通用形式如下: package pkg1[.pkg2[.pkg3]]; 包层次一定要在Java开发系统的文件系统中有所反映。例如,一个由下面语句定义的包: package java.awt.image; 需要在你的UNIX、Windows或Macintosh文件系统的 java/awt/image, java\awt\image或 java:awt:image中分别保存。一定要仔细选用包名。你不能在没有对保存类的目录重命名的情况下重命名一个包。 9.1.2 理解类路径(CLASSPATH) 在介绍运用包的例子之前,关于类路径环境变量的简单讨论是必要的。当包从访问控制和名称-空间-冲突中解决很多问题时,在编译和运行程序时它们导致某些古怪的难点。这是因为Java编译器考虑的特定位置作为包层次的根被类路径(CLASSPATH)控制。直到现在,你在同样的未命名的默认包中保存所有的类。这样做允许你仅仅通过在命令行键入类名编译源文件和运行Java解释器,并得到结果。这种情况下它还会工作是因为默认的当前工作目录(.)通常在类路径环境变量中为Java运行时间默认定义。然而,当有包参与时,事情就不这么简单。下面是原因。 假设你在一个test包中创建了一个名为PackTest 的类。因为你的目录结构必须与包相匹配,你创建一个名为test的目录并把PackTest.java装入该目录。然后使test 成为当前目录并编译PackTest.java。这导致PackTest.class被存放在test目录下。当你试图运行PackTest时,java 解释器报告一个与“不能发现PackTe

文档评论(0)

bm5044 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档