之前被这个编译弄糊涂了,不知道大家遇到过没,总结一下:
1、两个类A、B,文件A.java, B.java
A类需要用到B类
即: public class A
{
B testB = new B();
}
2、第一种情况:
A.java、B.java文件都保存在E:\Java中
在A.java文件中,没有任何显示的语句表明要包含B类,如:import B所在的文件包
问题:E:\Java>javac B.java 顺利编译,E:\Java>javac A.java 无法访问,
回到上级目录,E:\>javac Java\A.java 找不到符号
解决:将两个文件一起编译 E:\Java>javac B.java A.java 成功编译
或者E:\>javac Java\B.java Java\A.java 成功编译
3、第二种情况:
B类文件使用了package,这种打包可以有各种情况,以下举个例子
1)全路径,B的打包路径为全路径
B.java 保存在E:\Java\builder文件夹中, B.java中打包为: package Java.builder
编译B.java文件: E:\Java\builder>javac B.java 成功编译
E:\>javac Java\builder\B.java 成功编译
A.java 保存在E:\Java文件夹中, A.java中包含B为: import Java.builder.*;
编译A.java文件: 进入上一级目录,E:\>javac Java\A.java 成功编译
如果这样:E:\Java>javac A.java 编译失败,软件包Java.builder不存在
结论,A.java必须在B类包的最上一级路径中编译,而不是B类包的上一级路径中,这里是E:\
2)非全路径,B的打包为非全路径
B.java 保存在E:\Java\builder中,但是B的打包路径为: package builder;
编译B.java: E:\Java\builder>javac B.java 成功编译
E:\>javac Java\builder\B.java 成功编译
A.java 保存在E:\Java中,A.java包含B为: import builder.*;
编译A.java: 进入上一级目录, E:\>javac Java\A.java 编译失败,软件包builder不存在
E:\Java>javac A.java 成功编译
结论,就是进入打包的最上一级目录编译,这里是E:\Java\
3)最后,修改一下文件的保存位置
B.java 保存在E:\Java\builder中, 打包 package builder;
B.java 编译同上,问题只是出现在A.java的编译
A.java 保存在E:\Java\builder中,即与B.java同一个文件夹中
编译: E:\Java\builder>javac A.java 编译失败,软件包builder不存在
E:\Java>javac builder\A.java 成功编译
E:\>javac Java\builder\A.java 编译失败,软件包builder不存在
结论,即A.java的保存位置,需要能够知道路径builder,可以在builder的上级目录,也可以在builder中
编译时,需要在包的最上一级目录,这里是E:\Java\