假设A.java中有一个类AAA,即文件名与类名不相同!
A.java中引用了class B。在A.java的同一目录下已经存在B.class,还存在B.java。
那么在生成A.java的字节码AAA.class时直接调用B.class,而不再考虑重新编译B.java!但如果删除B.java文件将A.java改成B.java,那么在编译生成AAA.class文件时又不会直接调用B.class,而是重新编译B.java,于是提示class B找不到!我不明白的是为什么第一种情况直接使用B.class,第二种情况又不用B.class而是重新根据B.java来生成??望高手指点,多谢!!

解决方案 »

  1.   

    因为你改了A.java,所有A.java会重新编译,里面包含的AAA也会重新编译,但是找不到B.java源文件,所以报错
      

  2.   

    我已经解决了,原因是JAVA在编译时会检查B.java与B.class哪个新,如果前者新就重新生成B.class;如果后才新就直接使用B.class!PS:怪自己眼高手低,之前想到过这一原因,但认为JAVA编译器应该不会这么智能,以为只有IDE集成的工具才会使用makefile如此管理源文件!原来JAVA编译器会这么做,汗。