当前位置: 技术问答>java相关
包的概念是什么?引用整个包a和import a.*有什么不同?
来源: 互联网 发布时间:2015-06-06
本文导语: package b.a 是不是说引用b目录下的a子目录的所有class文件? 包是不是就是指目录呢?没有专门的包文件吧。。? 另外,package b.a和Import b.a.*有什么区别? CLASSPATH是什么,是不是package import的搜索跟目录?怎样设置...
package b.a 是不是说引用b目录下的a子目录的所有class文件?
包是不是就是指目录呢?没有专门的包文件吧。。?
另外,package b.a和Import b.a.*有什么区别?
CLASSPATH是什么,是不是package import的搜索跟目录?怎样设置?
包是不是就是指目录呢?没有专门的包文件吧。。?
另外,package b.a和Import b.a.*有什么区别?
CLASSPATH是什么,是不是package import的搜索跟目录?怎样设置?
|
package a
是指把这个class放在a里面,可以认为是指明路径
调用的时候用import a.*;
是指把这个class放在a里面,可以认为是指明路径
调用的时候用import a.*;
|
先对你说明一点,引用包是import,不是package,package是把这个class或interface放到一个包中。所以,没有什么package b.a.*;这种情况,package只能把这个class或interface放入一个明确的包中。
import一个class或interface时,你可以具体到这个想要用到的class或interface,如:import java.util.ArrayList;同样,你可以把util这个包中的所有的class或interface一次都包进来,import java.util.*;这样做的好处就是不用一个一个的引入了。classpath是你的程序运行时所要引用的包的路径,所以如果你的程序中要用到一些特定的包,你就要把这些包放入classpath中,当然,并不是说只要你import了,你就一定要在classpath中明确的包括这些包,这还与你装的jdk有关。
import一个class或interface时,你可以具体到这个想要用到的class或interface,如:import java.util.ArrayList;同样,你可以把util这个包中的所有的class或interface一次都包进来,import java.util.*;这样做的好处就是不用一个一个的引入了。classpath是你的程序运行时所要引用的包的路径,所以如果你的程序中要用到一些特定的包,你就要把这些包放入classpath中,当然,并不是说只要你import了,你就一定要在classpath中明确的包括这些包,这还与你装的jdk有关。
|
package实际上是一个名字空间。当你写:
package A
意思就是说“下面的代码都属于名字空间A”。如果没有这个声明,则代码属于default名字空间。
从default名字空间是访问不到A名字空间的,你必须告诉编译器“我要访问A名字空间”。怎么说?这样:
import A.*;
为什么要加上.*?这就表示“我要访问A名字空间下所有的类”。如果你明确知道要访问A里面的B类,就这样:
import A.B;
(顺便纠正gularess的一个错误:import不像include。C++中的include是包含源代码,而import是导入名字空间中的可执行单元。从这个意义上来说,import更像是C++中的using语句。)
至于CLASSPATH,那是JDK的一个参数。你可以到JDK的bin目录下去,输入java和javac,可以看到,这两个程序都有-CLASSPATH参数。什么意思呢?就是告诉java(或者javac):可能有些文件不是在JDK的默认路径下,你要到另外的地方去找。它跟package、import都没关系。package、import指的是名字空间,CLASSPATH指的是文件路径。
最后,关于CLASSPATH的设置:你可以在windows命令行下用set命令去设置:
set CLASSPATH = "c:jdk"
也可以在运行java(或者javac)的时候动态设置:
java -CLASSPATH="c:myprogram" a.class
现在能明白了吗?回去继续看书吧。
package A
意思就是说“下面的代码都属于名字空间A”。如果没有这个声明,则代码属于default名字空间。
从default名字空间是访问不到A名字空间的,你必须告诉编译器“我要访问A名字空间”。怎么说?这样:
import A.*;
为什么要加上.*?这就表示“我要访问A名字空间下所有的类”。如果你明确知道要访问A里面的B类,就这样:
import A.B;
(顺便纠正gularess的一个错误:import不像include。C++中的include是包含源代码,而import是导入名字空间中的可执行单元。从这个意义上来说,import更像是C++中的using语句。)
至于CLASSPATH,那是JDK的一个参数。你可以到JDK的bin目录下去,输入java和javac,可以看到,这两个程序都有-CLASSPATH参数。什么意思呢?就是告诉java(或者javac):可能有些文件不是在JDK的默认路径下,你要到另外的地方去找。它跟package、import都没关系。package、import指的是名字空间,CLASSPATH指的是文件路径。
最后,关于CLASSPATH的设置:你可以在windows命令行下用set命令去设置:
set CLASSPATH = "c:jdk"
也可以在运行java(或者javac)的时候动态设置:
java -CLASSPATH="c:myprogram" a.class
现在能明白了吗?回去继续看书吧。
|
package就是用来打包你编的类用的,
import就是用来引入大包后的类的,
classpath就是告诉编译器所需的包在哪个文件夹里!
import就是用来引入大包后的类的,
classpath就是告诉编译器所需的包在哪个文件夹里!
|
包的source是一个目录,比如你自己要建一个包的时候,你就要先建一个目录,把你的文件放入,编译。但是为了方便应用,一般情况下,我们得到的包是一个打好的jar或zip文件。
|
存在形式就是一个文件夹,这里面有bak、 classes、 defaultroot 、src、 work子文件夹。
|
你说的“包”是指package吧?
package是一个名字空间(name space),但是java强制要求package和目录对应。还记得刚才说到CLASSPATH吗?假设我们这样设置CLASSPATH:
set CLASSPATH = "C:program"
那么,java会把C:Program这个目录作为根(root),也就是默认名字空间的位置。如果你在c:programa下面放一些文件,就应该把它声明为package a,不然会出现一些错误,你可以自己试试。
王森在《程序员大本营2001》JAVA版上有一篇文章非常详细地介绍了这个问题,建议你去看看。
package是一个名字空间(name space),但是java强制要求package和目录对应。还记得刚才说到CLASSPATH吗?假设我们这样设置CLASSPATH:
set CLASSPATH = "C:program"
那么,java会把C:Program这个目录作为根(root),也就是默认名字空间的位置。如果你在c:programa下面放一些文件,就应该把它声明为package a,不然会出现一些错误,你可以自己试试。
王森在《程序员大本营2001》JAVA版上有一篇文章非常详细地介绍了这个问题,建议你去看看。