classpath里是否有"."也就是当前目录?

解决方案 »

  1.   

    //A.java
    package pack;
    public class A {
    public String getId (){
    return "a d ID" ;
    }
    };//B.java
    package pack;//加一个引入试试看
    import pack;public class B {
    public void test(){
    A a = new A(); }
    }
      

  2.   

    解决办法:
    1.把A.java和B.java放在同一目录下,用javac *.java编译
    2.javac -d . A.java
      javac B.java
    3.javac A.java,然后新建文件夹pack,把A.class放到里面
    再javac B.java
      

  3.   

    javac -d . A.java
    加上-d有何目的?又为何要新建pack文件夹?把A.class放到里面?
      

  4.   

    classpath的问题
    在编译B的时候,需要遍历classpath,查找pack/A.class的存在
    通常classpath中都会设置".",这个小点代表了当前路径
    所以用javac -d . A.java编译,自动生成包路径,或是手工把A.class放到对应的包路径中,就可以使编译B.java的时候能正确找到A
      

  5.   

    javac -d . A.java
    加上-d有何目的?
    ----------------------------------
    直接运行javac,会有提示信息,告诉你各个编译参数的意义
      

  6.   

    通常classpath中都会设置".",这个小点代表了当前路径
    ----------------------------
    我已经设置了“.”这个CLASSPATH
    并且文件结构是这样的:
    E:\
       |
       -pack
           |
           --A.java
           --B.java
    按理说,B.JAVA 应该是可以找到A.CLASS 的
    可是,你为什么要在里面加一个pack包呢?
          --pack
               |
                --A.class
    (这是按你的方法做的,然后就出了这么一部分)
      

  7.   

    因为在你用javac B.java编译时
    classpaht中的那个“.”指向的是E:\pack
    编译器会以这个目录为基础,寻找pack/A.class的存在
      

  8.   

    如果只想知其然,以后命令行编译时就用javac -d . *.java
    或者是用ant做make工具
    当然,用IDE也是很不错的选择要想搞清楚这个问题,就得多找些java虚拟机和classloader的资料看看
    然后把心得拿来给大家分享,^_^