4.5 包

 一、

Java程序编译的类被放在包内,要访问类就要给出类所属的包名,来指明类是在哪一个包中,以便能够找到该类。一个包中有许多类,同时还可以有子包。如我 们会在应用程序中经常用到Systen.out.println()方法来讲结果输出。参看Java的包,我们知道System是一个类,它属于lang 包;同时,lang又属于java包。指明类的位置是,当没有用import语句,要访问System类就首先要指明在哪一个包中(用VJ++编写程序 时,每一个源文件都默认用import语句将java.lang包中的所有类引入,所以可以直接用类名System来访问类)。Java用小圆点"."来 说明包的这种包含关系,例如:
lang.System表示System类属于子包lang,java.lang表示子包lang是属于java包,java包是最外层包即根包。这样 java.lang.System已经完全表明了System包的层次关系,根据这种关系,就能够找到System类并访问它了 。 java.lang.System称为访问类System的全限定名,用全限定名就可以访问类了,要访问类需要完全说明包的层次关系,例如java是最外 层包,lang.System不是类System的全限定名,不能用它来访问类System。
当类有其静态成员变量和静态成员方法时,静态变量和静态方法能够被类直接访问,out是System类的静态成员,out有一个方法println(),下面介绍怎样访问类的静态成员。
能够用类的全限定名访问类,同样可以通过类成员的全限定名访问类的成员,如System的成员out是一个对象,out的全限定名为 java.lang.System.out;同时,对象out又有println()方法,则println()方法的全限定名为: java.lang.System.out.println(),通过该名可以访问println()方法。
下面的程序是使用全限定名来访问方法的实例:
mainclass
{
public static void main(String arg[])
{

java.lang.String hello=new java.lang.String("hello world!");
java.lang.System.out.println(hello);

}

}
类的全限定名与类在文件系统中的存储结构即目录有对应关系,例如java.lang.Sytem表示类System存储在lang目录中,lang是java的子目录,java是根目录。java.lang对应的目录为:\java\lang
当包的层次很多,而类处于较内层的包时,则类的全限定名较长,例如有下面的层次的包:school.department.class.group

有名为fly的类在包group中,model类在包department中,则:
fly的全限定名为:school.department.class.group.fly
model的全限定名为:school.department.model
显然用这样的名字来操作类,将是非常麻烦的。因此,Java提供了import语句。下面介绍包操作语句 import和 package。

二、

 包操作语句import
指明将要访问的类所在的包,以便在当前目录找不到时,在import语句指明的包中寻找,若找不到类将出现编译错误。
包语句import的一般格式:
import 类名;
我们知道,访问类可以用全限定名来访问,当要访问的类在同一个包中时,这时可以直接用要访问的类的类名代替全限定名进行操作。例如,我们定义了两个类 firstclass、secondclass,它们都属于mylopbag.smallbag包,在secondclass类中可以直接用 firstclass代替全限定名mylafgebag.smallbag.irstclass lA N irstclass类。
当所要访问的类不在同一个包中时,就需要使用全限定名。全限定名往往很长,为此用import语句来减短访问类时用的名字。下面介绍import语句的两种用法。
用import语句。指明要访问的类位置。我们知道,类System在子包lang中,子包lang在最外层包即根包java中,我们引入如下语句
第一种用法: import Java.lang.*;
表示引入 java.lang包内的所有类,当要访问包中的类时,直接用类名,如直接用类名为System访问类System.同时,类System中定义了Prinln()方法,用System.println()就可以调用方Prinln();
第二种用法: imnort java.lang.System;
表示只引入java.lang包中的System类,访问包java.lang中的类时.只有System类能用类名来访问,包中的其他类需要全限定名来访问。
System.println()调用println()方法,其它类的成员则需要用成员的全限定来访问。用该语句能减少访问类时搜索的路径,提高运行的效率。
要注意的是import语句引入的是类,不能是子包,例如
import java.lang.*;
该语句在编译时会出错,因为lang是java的一个子包,不是类,而VJ++认为lang是一个类,这样会出现找不到lang类的提示。用户在编程时,系统默认在每个源文件头加入了下面的import语句:
import java.lang.*;
因此在用到这条语句时,编程时无需用说明。import语句在源文件的前面,一个源文件可以有多条import语句。import语句在package语 句后面。import语句与 C语言的 include语句有本质的区别。import语句只指明要用到的类所在的位置,以便能在用到时可以加载;而 C语言用 include语句将要用的文件包含在源文件中,作为源文件编译成一个模块。这体现了Java语言的特点,用户只需要将模块编译一次。当用户在编写另一个 模块用到已经编译的模块时,只要告诉编译程序它的位置,如用全限定名或者用import语句,编译程序无需再一次编译已经编译的模块,就能够将源文件编译 通过。 


三、

 包操作语句Package
Package语句必须是源文件的第一条语句,且一个源文件只能有一条该语句。Package语句的格式为:
Packape 包名;
例如:
Package myrotbag;
也可以是:
Package myrootbag.mysubbag;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值