最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

JAVA中的PACKAGE机制

来源:动视网 责编:小OO 时间:2025-10-01 09:46:52
文档

JAVA中的PACKAGE机制

JAVA中的PACKAGE机制——(好文转帖)2007-06-1022:211,什么都别说,先跟着我来做一把我们先找一个目录,比如C:\\myjob然后我们建立两个目录,一个叫做src,一个叫做binC:\\myjob>mdsrcC:\\myjob>mdbinC:\\myjob>dir驱动器C中的卷是LIGHTNING卷的序列号是3DD1-83D9C:\\myjob的目录2005-12-25  14:33              .2005-12-25  14:33             
推荐度:
导读JAVA中的PACKAGE机制——(好文转帖)2007-06-1022:211,什么都别说,先跟着我来做一把我们先找一个目录,比如C:\\myjob然后我们建立两个目录,一个叫做src,一个叫做binC:\\myjob>mdsrcC:\\myjob>mdbinC:\\myjob>dir驱动器C中的卷是LIGHTNING卷的序列号是3DD1-83D9C:\\myjob的目录2005-12-25  14:33              .2005-12-25  14:33             
JAVA中的PACKAGE机制——(好文转帖)

2007-06-10 22:21

1,什么都别说,先跟着我来做一把

我们先找一个目录,比如C:\\myjob

然后我们建立两个目录,一个叫做src,一个叫做bin

C:\\myjob>md src

C:\\myjob>md bin

C:\\myjob>dir

驱动器 C 中的卷是 LIGHTNING

卷的序列号是 3DD1-83D9

C:\\myjob 的目录

2005-12-25   14:33     

           .

2005-12-25   14:33     

           ..

2005-12-25   14:34     

           src

2005-12-25   14:34     

           bin

                0 个文件               0 字节

                4 个目录     305,123,328 可用字节

C:\\myjob>

然后我们在src目录中去写程序

C:\\myjob>cd src

C:\\myjob\\src>

我们写这么4个java文件

////A.java

package com.lightning;

public class A{

{System.out.println("com.lightning.A");}

}

////B.java

package com.lightning;

public class B{

{System.out.println("com.lightning.B");}

}

////C.java

package com;

public class C{

{System.out.println("com.C");}

}

////Test.java

package net.test;

import com.lightning.*;

import com.*;

public class Test{

public static void main(String[] args)

{

         new A();new B();new C();

         System.out.println("net.test.Test");

}

}

写好之后就是这样

C:\\myjob\\src>dir

驱动器 C 中的卷是 LIGHTNING

卷的序列号是 3DD1-83D9

C:\\myjob\\src 的目录

2005-12-25   14:34     

           .

2005-12-25   14:34     

           ..

2005-12-25   14:39                 86 A.java

2005-12-25   14:40                 86 B.java

2005-12-25   14:42                194 Test.java

2005-12-25   14:43                 68 C.java

                4 个文件             434 字节

                2 个目录     305,106,944 可用字节

然后我们建立com目录,com\\lightning\目录,net\est\目录

C:\\myjob\\src>md com

C:\\myjob\\src>md com\\lightning

C:\\myjob\\src>md net\est\

我们将Test.java放入net\est\中去

将A.java,B.java放入com\\lightning\中去

将C.java放入com\中去

C:\\myjob\\src>move Test.java net\est\

C:\\myjob\\src>move A.java com\\lightning\

C:\\myjob\\src>move B.java com\\lightning\

C:\\myjob\\src>move C.java com\

然后我们在c:\\myjobs中发令:

C:\\myjob\\src>cd ..

C:\\myjob>javac -sourcepath src -d bin src\\net\est\\Test.java

然后我们看看bin目录中多了什么

C:\\myjob>dir bin /s

驱动器 C 中的卷是 LIGHTNING

卷的序列号是 3DD1-83D9

C:\\myjob\\bin 的目录

2005-12-25   14:34     

           .

2005-12-25   14:34     

           ..

2005-12-25   14:46     

           net

2005-12-25   14:46     

           com

                0 个文件               0 字节

C:\\myjob\\bin\\net 的目录

2005-12-25   14:46     

           .

2005-12-25   14:46     

           ..

2005-12-25   14:46     

           test

                0 个文件               0 字节

C:\\myjob\\bin\\net\est 的目录

2005-12-25   14:46     

           .

2005-12-25   14:46     

           ..

2005-12-25   14:46                520 Test.class

                1 个文件             520 字节

C:\\myjob\\bin\\com 的目录

2005-12-25   14:46     

           .

2005-12-25   14:46     

           ..

2005-12-25   14:46     

           lightning

2005-12-25   14:46                338 C.class

                1 个文件             338 字节

C:\\myjob\\bin\\com\\lightning 的目录

2005-12-25   14:46     

           .

2005-12-25   14:46     

           ..

2005-12-25   14:46                354 A.class

2005-12-25   14:46                354 B.class

                2 个文件             708 字节

      所列文件总数:

                4 个文件           1,566 字节

               14 个目录     305,057,792 可用字节

然后我们执行,同样在c:\\myjobs\下发令

C:\\myjob>java -cp bin net.test.Test

com.lightning.A

com.lightning.B

com.C

net.test.Test

2,从实践到理论

刚才我用一个非常简单但是非常完整的例子给大家演示了java的package机制。

为什么以前脑海里面那么简单的javac会搞得这么复杂呢?

实际上它本就这么复杂,

并不是一个.java,一行javac一个当前目录中的class这么简单。

首先我要打破一些东西,然后才好建立一些东西。

javac并非只是给一个.java编译一个class的。javac自带有make机制,也就是说,如果在

javac的参数中java文件使用到的任何类,javac首先会去找寻这个类的class文件存在与否

,如果不存在,就会在sourcepath中找寻源代码文件来编译。

什么是sourcepath呢?sourcepath是javac的一个参数,如果你不加指定,那么sourcepath

就是classpath。

比如我们装好jdk之后,我说过不要设定classpath环境变量,因为大部分人一旦设定了

classpath,不是多此一举把什么dt.jar放进去。(我可以好好打击你一下,告诉你一个可

悲的事实——jre永远不会从你这个classpath中去寻找dt.jar。你完全是徒劳的!)就是

把"."搞不见了,搞得是冷水一盆盆的往自己身上泼,脑袋一点点的涨大。

不要设!classpath没有你想象中那么普适和强大,它只是命令行的简化替代品。

你不设的话它就是"."。

回到sourcepath,sourcepath指的是你源代码树的存放地点。

为什么是源代码树?而不是一个目录的平板源代码呢?

请大家将原本脑海中C的编译过程完全砸掉!

java完全不同,java没有头文件,每个.java都是要放在源代码树中的。

那么这颗树是怎么组织的呢?

对了,就是package语句。

比如写了package com.lightning;

那么这个.java就必须放在源代码树根\的com\\lighting\之下才行。

很多浮躁的初学者被default打包方式宠坏了。自我为中心,以为java就是一套库,自己写

的时候最多import进来就行了,代码从不打包,直接javac,直接java,多么方便。

孰不知自己写的这个.java也不过是java大平台的其中一个小单元而已。如果不打包,

我写一个Point,你写一个Point,甚至更有甚者敢于给自己的类起名叫String等等。

全部都在平板式的目录中,那jre该选哪一个?

一旦要使用package语句,就要使用代码树结构,当然,你要直接javac,也行。

不过javac出来的这个class要放在符合package结构的目录中才能发挥正常作用,否则就是

废物一坨。

而且,如果你这个.java还用到其它自己写的有package语句的.java,那这个方法就回天乏

术了。

按照sun的想象,应该是写好的.java放在符合package结构的目录中,package语句保证了

正确放置,如果目录位置和package语句中指示的不同,则会出错。

所以按照刚才我们的那种package写法,我们必然要将那几个.java文件放入相应的目录中

才能让javac顺利找到他们来make。

有人说javac可不可以像java那样 java aaa.bbb.c...java?

不可以

javac中的那个.java文件参数必须是一个文件系统的路径文件名形式。

然后如果用到其它的.java,javac会根据目前的sourcepath出发寻找目录结构中的那些

java文件。

当然了,既然打了包,在使用的时候。

要么写全名——包名.类名

或者使用import

不得不提的是,import就好比c++的using,它不负责做文件操作,它只是方便你写代码。

另外import语句中的*代表的是类名,不代表包名片断。

你import com.*; 

编译器仍然找不到com.lightning中的任何类。

反之亦然。

就好象你告诉编译器,我这里面要用到姓诸葛的人。

那么姓诸的人当然编译器不会认为也包含在内。 

所以,如果程序一旦写到一定规模。

就不得不使用ant来管理这些。

或者使用IDE,否则jdk就真的变成了java developer killer。

但是对于初学者,在了解为什么会有ant之类的之前,还是要体会一下使用

jdk的艰辛。

这个和以前在unix上开发的人用gcc命令行到后来使用make之后使用ide

之类的时候的体会是类似的。

最后,javac的-d参数是指示编译出来的class文件放在哪里的,如果你不指定的话,它们

和.java混在一起。当然也符合目录结构。

文档

JAVA中的PACKAGE机制

JAVA中的PACKAGE机制——(好文转帖)2007-06-1022:211,什么都别说,先跟着我来做一把我们先找一个目录,比如C:\\myjob然后我们建立两个目录,一个叫做src,一个叫做binC:\\myjob>mdsrcC:\\myjob>mdbinC:\\myjob>dir驱动器C中的卷是LIGHTNING卷的序列号是3DD1-83D9C:\\myjob的目录2005-12-25  14:33              .2005-12-25  14:33             
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top