资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Chapter,11,大型程序的发展,在,Java,里,我们可以将大型程序内的 类独立出来,分门别类地存到文件里,再将这些文件一起编译执行,如此的程序代码将更具亲和性且易于维护。本章将介绍大型程序的发展、类库的概念以及,Java,所提供的常用的类库。,11-1,文件的分割,在开发大型程序时,由于工作上的需要,程序代码的开发往往是有一些人,或几个小组同时进行。每个参与的小组或小组成员分别负责某些类,并肩编写好的类分别保存在各自的文件中,知道所有的类均开发好,在分别编译与执行。这种文件分割的方式,好处在于便于程序的开发与维护。,在,java,里是如何实现文件的分割与编译呢?让我们再以,CCircle,类为例将编好的两个类分分开保存成两个文件,并置于同一个文件夹内(假设放在,c:javapack1,文件夹内),/,CCircle.java,文本置于,c:javapack1,文件夹下,Class CCircle /,定义类,CCircle,Public void show(),System.out.println(“show()method called”);,/,app11_1.java,文本置于,c;javapack1,文件夹内,Public class app11-1,Public static void main(String args),CCircle cir=new CCircle();,Cir.show();,将文件创建好之后,在,Java,的环境里分别编译这两个文件:,c:javajavac pack1 CCircle.java,c:javajavac pack1 app11_1.java,编译好之后,分别产生,CCircle,.class,与,app11_1.class,两个文件,,如图,111,所示,CCircle,类,CCircle,类,App11-1,类,App11-1,类,complie,complie,运行程序:,C:javajava pack1app11_1,运行结果:,Show()method called,通过以上实例大家应该可以了解如何编译运行分割过的,Java,文件了。,11-,2,使用,package,package,是在使用多个类或接口时,避免名称重复而采用的一种措施。怎么使用呢,?,在类或接口的最上面一行加上,package,的声明就可以了。,11-,2,-,1,package,的基本概念,Package,的声明,Package package,名称,经过,package,的声明之后,在同一文件内的接口或类都被纳入相同,package,中。加上,package,的声明之后,编译与运行的过程与方法有所改变。一个实际的例子:,app11_2,是,package,使用的范例。请先建文件,再置于,pack2,文件夹内。注意存放,app11_2.java,的文件夹名称必须与,package,名称相同。,/,app11_2,package,的使用(),此文件置于,pack2,文件夹内,Package pack2;,Class CCircle /CCircle,类已置于,pakcage pack2,中,public void show(),System.out.println(“show()method called”);,public class app11_2 /,将,CCircle,类也纳入,package pack2,当中,public static void main(String args),CCircle cir=new CCircle();,cir.show();,编译,app11-2.java:c:javajavacapp11_2.java,让我们检查,pack2,文件夹就会发现产生,CCircle.class,app11-2.class,这样两个文件,如图,11-2,所示,执行,app_2:,需要特别注意的两点:,C:javajava pack2.app11_2,执行结果:,Show()method called,1.,编译时必须输入“文件夹名称,Java,文件名”,2.,运行时必须输入”,package,名称,.,类名称“,11-2-2,将独立分开的类纳入同一个,package,中,问题:,当类存在不同的文件,但隶属于同一个,package,那么怎样编译与运行呢?首先,现在,Java,的文件夹下创建一个子文件,pack3,然后,在分别创建下列两个文件,并将其保存在,pack3,文件内;,Package pack3;/,将,CCircle,类纳入,package pack3,中,Classs CCircle,Public void show(),System.out.println(“show()method called”);,Package pack3,Public class app11_3,Public static void main(String args),CCircle cir=new CCircle();,cir.show();,编译,app11_3,:,运行,app11_3,C:javajavac pack3app11_3.java,C:java.javac pack3CCircle.java,c:Javajava pcke3.app11_3,运行结果:,Show()method called,由本例中,读者可看到不论有几个类,分成几个文件,只要在每个文件面加上,package,名称,便可将它们归属于同一个,package,,如图,11-4,所示,其他程序代码的编写和先前介绍过的方法均完全相同。,11-3,访问在不同,package,里的类,到目前为止,我们所介绍的类都是隶属于同一个,package,,因此在程序码的编写上并不需要做修改。但如果几个类分别属于不同的,package,时,某个类要访问到其他类的成员时,则必须做下列的修改:,若某个类需要被访问时,则必须把这个类公开出来,也就是说,此类必声明成,public。,若要访问不同,package,内某个,public,类的成员时,在程序代码内必须明确指明“被访问,package,的名称,.,类名称”。,/,CCircle.java,/CCircle.java,此文件存放在,pack4b,文件夹下,package pack4b;,Public class CCircle /,将,CCircle,类纳入,pack4,中,Public void show(),System.out.println(“show()method called”);,11-3-1,简单的范例,编译程序:,/,app11_4.java,此文件存放在,pack4a,中,Package pack4a;,Public class app11_4,Public static void main(String args),Pack4b.CCircle cir=new pack4b.CCircle();,cir.show();,c:javajavac pack4aapp11_4.java,c:java pack4bCCircle.java,运行结果:,c:javajava pack4a.app11_4,Show()method called,运行程序:,1.把,CCircle,类公开出来,也就是,CCircle,类必须声明称,public,,必须以”被访问,package,的名称,.,类名“的格式来编写。,2.访问位于不同,package,里的类时,被访问的类必须声明称,public,否则,出错。,在本例中我们学要注意两点:,下面我们通过图例来解释这种访问关系,图11-5,访问位于不同,package,里的类,11-3-2,public private,与,protected,修示符的角色,修示符,说明,没有修示符,成员或构造函数只能被同一个,package,内的程序访问,Public,如果所属类声明成,public,,则成员或构造函数可被不同的,package,内所有类所访问。若所属类不是声明成,public,则成员或构造函数只能被同一个,package,内的程序所访问,Private,成员或构造函数只能被位于同一个类内的程序所访问,protected,成员或构造函数只能被位于同一个,package,内的类及它的子类来访问,表11-1,成员与构造函数所使用的修示符,表11-2,类与接口所示用的修示符,修示符,说明,没有修示符,只能让同一个,package,里的类来访问,public,其他,package,包里的类也可以访问此类的成员,在,app11_4,中我们是通过“被访问的,package,名称,.,类名称”的语法来访问位于不同包里的类,很显然这不是一种好的方法。那么,有没有更好的方法呢?答案是肯定的。我们可以将要被访问包的,package,整个导入程序代码中,如此以来问题就更为简化了。,11-3-3,导入,package,导入包格式,Import package,名称,.,类名称,一个使用导入包的范例,/,CCircle.java package,的使用(四),此文件置于,pack5b,文件夹内,package pack5b;public class CCirclepublic void show()System.out.println(“show()method called”);,/,app11_5.java,package,的使用(四),此文件置于,package5a,Package pack5a;,Import pack5b.CCircle;/,加载,pack5b package,里的,CCircle,类,Public class app11_5,public static void main(String,args,),CCircle,cir=new,CCircle,();/,不用再写,package,的名称,cir.show();,当,package,越建越多时,将,package,分门别类也就更加重要。某些,packag,依功能划分,可再细分为几个“子,package”(sub-package),,这种分类,,packages,划分为上下层次的关系,使得程序代码的编写与维护更加容易。,11-4,构造,package,的层次关系,那么,在,Java,里要如何创建,package,的层次关系呢,?,假设,app11_6,类隶属于,package pack6,CCircle,与,CRectangle,类分别属于,package subpack1,与,subpack2,,而希望把,subpack1,与,subpack2,设成,pack6,的,sub-package。,在这种情形下,可以先创建,app11_6、subpack1,与,subpack2,三个文件夹,其中,subpack1,与,subpack2,为,app11_6,的子文件夹。接着把,app11_6.java,存在,pack6,文件夹里,再分别把,CCricle.java,与,CRectangle.java,存到,subpack1,与,subpack2,文件夹内,即可完成,package,层次的设置。图,11-7,为文件夹与所存放的,Java,源文件的层次关系图。,图11-7,的文件夹层次关系可转化成,package,的层次关系图,图,11-8,程序实现,/,CCircle.java,此文件置于,pack6subpack1,文件夹下,Package pack6.subpack1;,Public class CCircle,Public void show(),System.out.println(“show()method of claas CCircle called”);,/,
展开阅读全文