package的简单定义如下:package是一个为了方便管理组织java文件的目录结构,并防止不同java文件之间发生命名冲突而存在的一个java特性。不同package中的类的名字可以相同,只是在使用时要带上package的名称加以区分。
在使用package的时候,如果java文件中使用了package,那么该java文件必须放在命名与package名称相同的目录下,比如:
packagetest;
publicclassTest{}
该文件的目录结构则为:...test/Test.java
又如:
packagecom.micheal.test
publicclassTest{}
java解释器会将package中的.解释为目录分隔符/,也就是说该文件的目录结构为:...com/micheal/test/Test.java
那么package中的类的访问权限是怎么样的呢?在同一package中的类是可以互相访问的,比如:
//Test1.java
packagetest;
classTest1{}
//Test2.java
packagetest;
publicclassTest2{
publicstaticvoidmain(String[]args){
Test1t;
}
}
由于Test2与Test1在同一个package——test中,所以Test2能够直接调用Test1生成Test1的引用变量t;在命令行进行编译时,直接编译Test2.java即可:javacTest2.java(若没有进入Test1和Test2的目录,需在Test2前加上绝对路径)
若类在不同的package中,那么在一个类中要调用另一个package中的类(必须是public类,非public类不支持不同包间访问),需要在类名前明确加上package名称;不过,java中存在一个让java程序员偷懒的特性,叫做import关键字。使用import就可以在一个package中导入另一个package中的类,不过import和C语言和C++中的#include是不同的,import并不会在当前java文件中嵌入另一个package中的类的代码,只是告诉java文件,不属于该包的类能够到哪里去寻找而已:
packagep1;
//importp2.Test2
publicclassTest1{
publicstaticvoidmain(String[]args){
p2.Test2t;//Test2tifweimportp2.Test2before;
}
}
那么问题来了,java文件在编译时如何知道p2这个package在哪?这里要提到一个重要的变量:classpath。classpath是java在编译程序时查找类文件的路径,java编译器会在classpath中包含有的路径中查找java的类文件。
举个例子,比如说classpath的值(Windows下)是.(当前目录);C:/,那么编译器在查找类的时候,就只会在当前目录和C:/中查找。所以如果p2这个目录与p1在同一目录层次下,那么p2就能直接被查找到了,查找也就结束了;如果不在的话,比如说p1的目录结构是C:/document/java/project/p1,p2的目录结构是C:/document/java/test/p2,那么如果C:/document/java/test不在classpath中,java解释器是找不到p2这个package的位置的,那么就会提示错误,因此需要将C:/document/java/test加入到classpath中。
java中的Package语句和import语句
在实际项目中会有成百上千个类,我们把近似的类放在同一个包里面,比如把实体类放在实体类包里面
package为解决类的命名冲突问题而引入的机制。
package语句作为Java源文件的第一条语句。(若缺省该语句,则指定为无名包。)约定俗成的给包起名为把公司域名倒过来写,如com.sunJava编译器把包对应于文件系统的目录管理,package语句中,用‘.’来指明包(目录)的层次,例如packagecom.sun;则该文件中所有的类位于.comsun目录下。
总结:
1.如果你要把一个类放在包下面,第一句写package,你编译出来的类必须位于正确的目录下面。
该类的源码可能会产生影响(解决办法:删除或转移到别的目录)
2.如果想在另一个类里面引用包里面的类,要把名字写全。(相当用文件的绝对路径访问)或者用import导入,但位于同一个包中的类不需要引入
3.必须class文件的最上层包中的父目录位于classpath下面。
4.编译后,执行一个类的时候也需要把包名写全,不然无法执行。
J2SDK中主要的包介绍(在jdk5.0/jre/lib/rt.jar里面,可用解压软件解开查看)
Java.lang-包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能
Java.awt-包含了构成抽象窗口工具集(abstractwindowtoolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
Java.applet-包含applet运行所需的一些类
Java.net-包含执行与网络相关的操作的类
Java.io-包含能提供多种输入/输出功能的类
Java.util-包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数
其中就Java.lang包不用引入就能直接使用,其他包里面的类都要用import引入才能使用。
如何打包?
先定位到classpath设置的目录下jar-cvfxx.jar*.*-c创建新的文档-v生成详细输出到详细输出上-f指定存档文件名即把classpath下的所有文件打包成xx.jar文件如何使用呢?把xx.jar的绝对路径放到classpath下面,这样就可能正常访问了
eg.
在一个文件中
packagecom.sun;
publicclassCat{
}
在另一个文件中
//importcom.sun.*;
publicclassT{
publicstaticvoidmain(String[]args){
com.sun.Catc=newcom.sun.Cat();
}
}
1.把第一个文件编译生成的.class文件放到com.sun目录下,然后就可编译执行T.java了,其中Cat类必须为public
2.第一个文件不变,修改二个文件成如下:
importcom.sun.Cat;
publicclassT{
publicstaticvoidmain(String[]args){
//com.sun.Catc=newcom.sun.Cat();
Catc=newCat();
}
}
同样可以达到目的。但是有点小问题,就是importcom.sun.*;应该可以代替importcom.sun.Cat;但在调试过程中却会报错。
但是如果两上文件不在同一文件目录下,这时上面的程序就会报错。为此我们需要为此设置环境变量“classpath”,在里面添加路径,即com.sun的最上层目录的上一级目录,即存放com文件夹的目录名。这样程序就会从这里开始寻找需要的类。
一个文件中可以同时有package和import存在,但在执行时要注意java后面跟的文件名要写全。
以上就是动力节点java培训机构的小编针对“快来了解java package的作用及使用吧”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习