面向WEB的java语言程序设计包.ppt_第1页
面向WEB的java语言程序设计包.ppt_第2页
面向WEB的java语言程序设计包.ppt_第3页
面向WEB的java语言程序设计包.ppt_第4页
面向WEB的java语言程序设计包.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,面向WEB的JAVA语言程序设计,天津职业技术师范大学 2013年4月23日,第3章 包,“包”指的是一组提供访问保护和命名空间管理的相关的类型。注意这里的“类型(types)”指的是类、接口、枚举以及注解类型。枚举和注解类型分别是特殊的类和接口,所以在本章中,涉及到“类型”时简单地指类和接口。本章讲解如何将类和接口封装到一个包中、如何使用包中的类、以及如何组织自己的文件系统使得编译器能够找到源文件。,利用面向对象技术开发一个实际的系统时,通常需要定义许多类共同工作,为了更好地管理这些类,Java中引入了包的概念。就像文件夹(目录)把各种文件组织在一起,使硬盘更清晰、有条理一样,Java中的包把各种类组织在一起,使得程序功能清楚、结构分明。特别地,使用包可以有利于实现不同程序间类的复用。,包是一种松散的类的集合。一般不要求处于同一个包中的类有明确的相互关系,如包含、继承等,但是由于同一包中的类在缺省情况下可以互相访问,所以为了方便编程和管理,通常把需要在一起工作的类放在一个包里。例如前面使用过的类PhoneCard、Number-PhoneCard和D200-Card等就可以放在同一个包中。,3.1 使用包,试想一下:如果一个具有100多人的单位,没有任何的部门和科室,管理一定会陷于混乱。同样,当一个程序中包含100多个类时,如果不将它们按其用途分门别类组织在不同的文件夹中,那么开发工作也将一片混乱。为了使得各种类型易于查找和使用,避免命名冲突,并控制访问,程序员将一组相关的类型封装到包(package)中。,3.2 创建包,要创建一个包,需要为包选择一个名称,并将一个package语句和包的名称放在每一个想要放到包中的源文件(包含各种类型:类、接口、枚举和注解类型)的顶部。其中package为关键字。所有的包名都是小写。,3.2.1 创建包的语句,使用含有关键字package的语句来创建包。例如,在上一节创建的各种与图形相关的类,都放到同一个包graphics中,那么需要在每一个源文件中的顶部包含以下代码: package graphics;,3.2.2 命名包,在全世界同时会有很多的程序员都使用Java程序设计语言来编写类和接口,所以很有可能许多程序员将使用相同的名称来命名不同的类型。实际上,在上一节的例子就是这样的:作者定义了一个Rectangle类,同时在java.awt包中已经有了一个Rectangle类。,3.2.3 包命名惯例,包名使用小写字母,以避免与类名或接口名冲突。对公司来说,使用其颠倒的Internet域名来开始其包名。在一个公司内部发生的命名冲突,需要按照该公司的规定来处理。,在缺省情况下,系统会为每一个 .java源文件创建一个无名包,该 .java文件中定义的所有类都隶属于这个无名包,它们之间可以相互引用非private的域或方法。但是由于这个无名包是没有名字的,所以它不能被其他包所引用,即无名包中的类不能被其他包中的类所引用和复用。为了解决这个问题,可以创建有名字的包。 创建包的语句需要使用关键字package,而且应该是整个 .java文件的第一个语句。 package 包名;,利用这个语句就可以创建一个具有指定名字的包,当前 .java文件中的所有类都被放在这个包中。例如下面的语句是合法的创建包的语句: package CardClasses ; package CardSystem . CardClasses ; 实际上,创建包就是在当前文件夹下创建一个子文件夹,以便存放这个包中包含的所有类的 .class文件。上面的第二个创建包的语句中的符号“.”代表了目录分隔符,即这个语句创建了两个文件夹。第一个是当前文件夹下的子文件夹CardSystem;第二个是CardSystem下的子文件夹CardClasses,当前包中的所有类就存放在这个文件夹里。,下面的例子创建了一个包,其中包含了前面使用过的PhoneCard类和它的子类:Number-PhoneCard,D200-Card。 package CardClasses; /创建包 abstract class PhoneCard double balance; abstract boolean performDial( ); double getBalance( ) return balance; ,abstract class Number-PhoneCard extends PhoneCard long cardNumber; int password; String connectNumber; boolean connected; boolean performConnection(long cn,int pw) if(cn = cardNumber else,return false; class D200-Card extends Number-PhoneCard double additoryFee; double balance; boolean performDial( ) if( balance (0.5 + additoryFee ) balance -= (0.5 + additoryFee); return true;, else return false; 上述程序片断将在当前目录下创建一个子目录CardClasses,并认为程序文件中定义的三个类PhoneCard,Number-PhoneCard和D200-Card产生的三个对应的字节码文件PhoneCard.class,Number-PhoneCard.class和D200-Card.class都放在这个子目录中。如果同一个程序文件中还定义了其他的类,则它们也将被视为在同一个包中。,3.3 使用包中的成员,组成包的类型称为“包的成员”,包括类、接口、枚举和注解类型,都是包的组成成员。从一个包的外部使用一个public包成员,必须满足以下条件之一: 通过全限定名指向包的成员。 导入包成员。导入成员所在的整个包。,3.3.1 通过全限定名引用包成员,如果所编写的代码与要引用的成员在同一个包中,或者要引用的成员已经导入,可以使用包成员的简单名称。,3.3.2 导入包中的成员,要导入一个指定的成员到当前文件中,需要在文件的开始放置一个import语句。import语句位于package语句之后,任何类型的定义之前。,3.3.3 导入整个包,有时候,在编写程序时,需要用到某些包中很多的类型,这时可以不用一个一个类型地导入,而要使用带有通配字符“*”(星号)的import语句导入一个特定包中包含的所有类型,如下面的代码所示。 import graphics.*;,3.3.4 包的层级,表面看来包是有层级的,但是它们在实际上没有这样的层级关系。例如,Java API包含有一个java.awt包,一个java.awt.color包,一个java.awt.font包,以及许多其他的以java.awt开头的包。但是,java.awt.color包、java.awt.font包和其他java.awt.xxxx包并不包含在java.awt包中。前缀java.awt(Java 抽象窗口工具箱)被用于许多与桌面程序设计相关的包,以使其关系更加明显,但是并不表示它们有内含的关系。,3.3.5 包成员名称冲突,如果一个包中的一个成员与另外一个包中的一个成员具有相同的名称,那么必须通过全限定名使用每一个成员。例如,在graphics包中定义一个名为Rectangle的类。在java.awt包中也包含一个Rectangle类。如果graphics和java.awt包都被导入到同一个文件中,那么象下面这样的代码就是不确定的: Rectangle rect ;,3.3.6 静态导入语句,有时需要频繁的访问某个(或某些)类中的static final字段(常量)和静态方法。反复地将这些类的名称作为前缀会导致代码混乱。“静态导入”语句提供了导入常量和静态方法的一种方式,这样就不需要使用它们的类名作为前缀。,将类组织成包的目的是为了更好地利用包中的类。通常一个类只能引用与它在同一个包中的类。如果需要使用其他包中的public类,则可以使用如下的几种方法。,1. 使用包名、类名前缀 一个类要引用其他的类,无非是继承这个类或创建这个类的对象并使用它的域、调用它的方法。对于同一包中的其他类,只需在要使用的属性或方法名前加上类名作为前缀即可;对于其他包中的类,则需要在类名前缀的前面再加上包名前缀。例如: CardClasses.D200-Card my200 = new CardClasses.D200- Card(12345678,1234); System.out.println(my200.toString( );,2. 加载需要使用的类 如果使用上面的方法,每当类名D200-Card出现时都必须附加一个包名的前缀,编程中使用起来非常麻烦。一个解决的方法是在程序文件的开始部分利用import语句将需要使用的整个类加载到当前程序中,这样在程序中需要引用这个类的地方就不需要再使用包名作为前缀。例如上面的语句在程序开始处增加了: import CardClasses. D200-Card; / 在程序开始加载其他包的类 语句之后,就可以直接写成: D200-Cardmy200 = new D200-Card(12345678,1234);,3. 加载整个包 上面的方法利用import语句加载了其他包中的一个类。有些情况下可以直接利用import语句引入整个包,此时这个包中的所有类都会被加载到当前程序中。加载整个包的import语句可以写为: import CardClasses . *; import java . awt . * ; 上面的第二个语句在前面的例子中已多次使用,它的作用是把Java系统有关抽象窗口工具的包(系统类库)加载到当前程序中。与加载单个类相同,加载整个包后,凡是用这个包中的类,都不需要再使用包名前缀。,4. CLASSPATH 包是一种组织代码的有效手段,包名实际上就指出了程序中需要使用的 . class文件的所在之处。另一个能指明 .class文件目录所在的结构是环境变量CLASSPATH。CLASSPATH类似于DOS操作系统中的PATH,它指明了所有缺省的类字节码文件路径,当一个程序找不到它所需使用的其他类的 .class文件时,系统会自动到CLASSPATH环境变量所指明的路径中去寻找。 设置CLASSPATH环境变量可以通过编辑系统的AUTOEXEC.BAT文件,或使用相关的DOS命令。例如下面的语句:,SET CLASSPATH .; c:jdk1.2lib; c:jdk1.2lib.classes.zip; 将CLASSPATH设置为当前目录: c:jdk1.2lib和c:jdk1.2libclasses.zip。 对于Java Application程序,还可以通过为Java解释器设置参数来指定类文件路径。例如,对于JDK中的Java解释器java .exe,有开关参数 -classpath;对于Visual J+中的Java解释器jview .exe,有参数 -cp。假设当需要解释执行的 test.class文件不在当前目录而在C盘的TEMP目录下时,可以使用如下的命令行语句: java test -classpath c:temp (回车) 来运行这个程序。,3.4 管理源文件和class类文件,Java平台的许多实现依赖于分组的文件系统来管理源文件和class文件(虽然Java语言规范对此没有要求)。例如,包名对应着系统中实际的目录名。包括在安装JDK时,所生成的目录也是与类所属的包路径相对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论