//A.java 文件所在目录是…\zhum\test
package zhum.test;public class A{
}//B.java 文件所在目录是…\zhum\testpublic class B{
}如上,B和A是在“默认包”还是B在A所在包外,还是B和A在zhum.test包?

解决方案 »

  1.   

    包其实说的是.class文件位置,和Java源文件无关,并且这些都是相对的,默认包也是相对你执行时的工作目录来说的
      

  2.   

    理论上都在zhum.test包内 只是B不声明正确的package是非法的
      

  3.   

    回1楼,就看成class文件也可以换个问法吧
    假如现在把从class A的public去掉,在B中能引用A吗?
      

  4.   

    3楼对!如果B在默认包,那么B.class必须出现在ClassPath对应的根目录下。否则加载B时会抛出异常。假设B.class的位置没有问题,那么B必须import zhum.test.A才能访问A。
      

  5.   

    补充5楼,前提是A是public的,否则,无论import与否,B都不能访问A。
      

  6.   

    B放到那个目录里,实际上没什么意义。
    在一个工作目录下边,必须有一个公共的root路径,那样才有比较意义。
    不错,B是默认包,A的包为zhum.test
    但是两者似乎不能同时编译成功。
    只能分别编译了。
    而且想让他们在运行时都有效,就必须有两个path要放到classpath里头。
      

  7.   

    我实际测试了下如果B中package zhum.test;
    OK                      //这样他们在同一个包,即使A不是public也可以访问如果B中import zhum.test.A;
    OK                      //导入A,A相对B是包外,必须要A是public才可以访问如果B中什么都不加
    B.java:5: 无法访问 A
    错误的类文件: .\A.class
    类文件包含错误的类: zhum.test.A
    请删除该文件或确保该文件位于正确的类路径子目录中。
                    A a = new A();
                    ^
    1 错误                     //这个错误信息看不明白
    所以我得到的结果是:A处于zhum.test包。而B处于zhum\test目录下的默认包。
    不知道楼上的大哥们提到的classpath与这个何关?(zhum.test的classpath是正确设置的)
      

  8.   

    JVM首先在同一目录下找CLASS
    找不到,再在classpath的包里面找
    根据这个规则判断就可以了
      

  9.   

    1 你2个都单独编译没有问题
    2 你2个一起编译会编译错误
    3 你运行会找不到类OVER