A.java 放在 D:\Java\Example\A 文件夹中。内容如下:
package A;public class A {
public static int a=1;
public static void f(){
System.out.println(a);
}
}编译后的A.class 放在D:\Java\Example\A中。然后D:\Java\Example\A中有个B.java,内容如下:import A.A;
//import A.*;    ??///如果这样写就会错误,为什么?class B{
public static void main(String[] args){
A.f();
}
} 编译后的B.class放在D:\Java\Example\A中。没有设置任何classPath变量。请问import中的 A.A是相对那个路径来说的?为什么?
请问import A.* 为什么这样写就会错误?

解决方案 »

  1.   

    楼主,包不是这么弄滴
    package什么,就放在什么文件夹下,你的B根本没有package干吗还要放到跟A同一个目录下
    你要package A,就是说A文件夹是你工程目录的第二级目录,不能乱弄的
    包名建议小写,全部小写你的 B没有package就默认在工程根目录下,不然他们在同一个目录下你package干吗
      

  2.   

    修正:你的 B没有package就默认在工程根目录下,不然他们在同一个目录下你import干吗
      

  3.   

    类A 具有包限制,因此,即使你不把A.class放到A/目录下面,javac对其进行编译的时候,也会自动创建A文件夹,然后将A.class放进去。因为包的限制在目录中体现为文件夹。
        然而,类B,你没有设置包,当你引用import A.*;的时候,编译器会自动从当前目录寻找具有名字为A.的目录,然后,再从其中进行引用。可是此时,你的B 已经放在了A/下面,所以上面的引用,当然会提示A不存在。此时,只要将B.java移动到Example/目录中,与A/目录在同一级。那样重新编译即可。这种方式,才应该是正确的编译方式。
        至于你使用import A.A;为什么正确,我想原因也是一样。当编译器在当前目录下面不能发现A/目录时,它却发现了一个类的字节码文件,且标识这个类的名字为A.A。因此,编译器当即引用这个类。所以会正确编译。
        希望上面的对你有帮助。
      

  4.   

    回复:
    即使你不把A.class放到A/目录下面,javac对其进行编译的时候,也会自动创建A文件夹,然后将A.class放进去。但是我编译时候不会自动创建A文件夹。除非我用javac -d 这个命令编译。