假设你的代码文件PackagedClass.java和Foreign.java放在c:\目录下
那么编译PackagedClass.java会在c:\c05\test\生成一个PackagedClass.class文件
再编译Foreign.java时会c:\c05下生成一个Foreign.class文件;
而import c05.test.*;这条语句会去导找c:\c05\c05\test这个包,
当然这个包是不存在的,所以会报错!
如果没有package c05;这条语句;
Foreign.class会生成在c:\下.import c05.test.*;会寻找c:\c05\test这个包
当然就可以找到PackagedClass.class这个类了.
那么编译PackagedClass.java会在c:\c05\test\生成一个PackagedClass.class文件
再编译Foreign.java时会c:\c05下生成一个Foreign.class文件;
而import c05.test.*;这条语句会去导找c:\c05\c05\test这个包,
当然这个包是不存在的,所以会报错!
如果没有package c05;这条语句;
Foreign.class会生成在c:\下.import c05.test.*;会寻找c:\c05\test这个包
当然就可以找到PackagedClass.class这个类了.
我f盘的目录结构是:F:\CODE\java\c05\test
classpath配置为:
.;E:\jdk\lib\tools.jar;
E:\jdk\lib\dt.jar;
E:\jdk\bin; (这个就没必要了,应该加到PATH变量中)
E:\jdk\jre\lib\rt.jar;
F:\CODE\java;2、两个源文件所放置的位置是在
F:\CODE\java\c05\ 下面?3、编译时用javac -d . xxx.java
从当前目录开始创建相应的子目录代表包路径。
对于文件1
//package c05;
import c05.test.*;public class Foreign{
public static void main(String[] args){
PackagedClass pc = new PackagedClass();
}
}
产生的Foreign.class 就在当前目录F:\CODE\java\c05\
同时要引用到F:\CODE\java\c05\c05\test\PackagedClass.class也就是第2个文件编译后放在:F:\CODE\java\c05\c05\test\下面。
PackagedClass.java是放在F:\CODE\java\c05\test
我在cmd下:F:\CODE\java\c05下 javac Foreign.java 通过
然后 F:\CODE\java\c05下 java Foreign
回 爱生活爱星辉:
我还是不太明白。import c05.test.*;怎么会到\c05\c05\test这个包找呢!
书上说它应该是先在classpath下找到目录入口 然后再到c05.test下找所引用的包吗?
这写知识在哪本书上有介绍?
import test.*;--------------------〉此处改成这样(看看)public class Foreign{
public static void main(String[] args){
PackagedClass pc = new PackagedClass();
}
}在test下有文件2:
package c05.test;public class PackagedClass{
public PackagedClass(){
System.out.println("Creating a packaged class");
}
}
那么 F:\CODE\java>javac c05\Foreign.java(或者'F:\CODE\java\c05>javac Foreign.java'也可以)
F:\CODE\java>java c05.Foreign
这样就可以了
你的问题应该出在'F:\CODE\java\c05>java Foreign'上
wheee(正午游魂)已经提出了。我想说一下编译的问题。
这里为什么编译的时候'F:\CODE\java\c05>javac Foreign.java'也可以呢?
这是因为你的classpath包含了'.',也包含了'F:\CODE\java'
编译器先在当前目录(F:\CODE\java\c05)下找'c05\test'这个目录,找不到
然后再去'F:\CODE\java'下找,能找到,所以编译顺利通过但是如果classpath没有包含'F:\CODE\java'
那么就只能 F:\CODE\java>javac c05\Foreign.java
F:\CODE\java>java c05.Foreign这是另外一个问题了,希望能对你也有一点帮助
http://www.it315.org或看看王森的《java 深度历险》前两章。
编译:
C:\CODE\java>javac c05\Foreign.java运行:
C:\CODE\java>java -cp . c05.Foreign2.设置CLASSPATH=C:\CODE\java;.
编译:
C:\CODE\java\c05>javac Foreign.java运行:
C:\CODE\java\c05>java c05.Foreign
'goodhal0418(远远读你)'的答案根本是错的啊,竟然也可以有50
我不是想争些什么,技术的东西,对就是对,错就是错
本来就没有什么好争的