package com.haerbin;class Cat {
}
-----------------------------------------------------------
package com.haerbin;class Dog {
public static void main(String[] args) {
Cat c = new Cat();
}
}
-----------------------------------------------------------
上面的2个java文件,我放在了同一路径下,都是...\com\haerbin这个目录下,
为什么用javac Dog.java,访问不了呢,如果我把2个类最前面的package
都注释掉就能访问了,不加public就是default,不是说在同一包中的其他类
能访问嘛,有点不太懂啊,麻烦解释下啊,谢谢

解决方案 »

  1.   

    你这又不是类间访问
    javac X:/XX/.../Dog.java
      

  2.   

    1.首先给出正确答案:确保这两个类都在com/haerbin目录下,然后:javac com/haerbin/Dog.java就正确了。
    2.如果你直接用javac Dog.java,那么编译器就会把Dog.java所在目录当作基目录,并且从该基目录开始查找com/haerbin/Cat.java,所以就找不到Cat.java了,如果只有Dog.java没有Cat.java,那么使用javac Dog.java是没有问题的,但是此时使用java Dog还是会出错,必须得保证Dog.class在com/haerbin目录下,然后使用java Dog才正确。
    3.编译器在编译源文件的时候不检查目录结构。例如有一个源文件开头有一下语句:package com.text;即使这个源文件没有在子目录com.text下,也可以进行编译。如果它不依赖于其他包,就不会出现编译错误,如果依赖于其他包,就会有问题。