最近看一本书的源码 遇到了棘手的问题一个类  如果 用javac编译 会报错!但源程序中存在class文件!那他那个class文件哪来的呢??说明下 按照书中的思路 那个类本该报错!但那个class文件怎么来的呢??

解决方案 »

  1.   

    是不是之前这个文件没错是产生的?只是现在没删掉而已,你把所有的class文件都删了再编译一下看看
      

  2.   

    别人编译的时候可能加了其他的jar包
      

  3.   

    是不是你的java文件里面定义了多个类啊,有的类正确编译了生成了class,报错的没有生成class
      

  4.   


    不是 的!就是那个class 文件!并且用这个class文件可以运行处想要实现的结果!class就应该是错误的!
      

  5.   


    有可能!但只知道加载class文件可以用自定义类加载器加载
    那编译能用其他的类加载呢!
      

  6.   

    那大概就是你本地环境的问题了。。看看JDK的版本是否对。。
      

  7.   


    呵呵!源码没错误!!这个我可以保证!
    那个程序是自定义类加载器!所以要加载class文件!
    但编译不成功怎么产生class文件啊
      

  8.   

    我简单说下他实现的原理是用一个ClassLoader加载这个类(Cracker)!也就是class文件!过程还要复杂!就这么说!
    如果没有class文件  就会说无法加载这个Cracker类!但直接编译要运行的类 
      

  9.   

    从你的截图来看,应该是相应类的没有能正确加载
    你是在编译Cracker,所以还谈不到其他程序动态加载Cracker(只有运行其他程序运行时加载Cracker的时候才涉及到这个问题),所以,现在的问题出在Cracker用到了其他包的类,你就必须保证你的ClassPath能找到相应的类,否则肯定编译出错
    原来的代码存在Cracker.class,可能当时作者的环境里有相关的Greeter类和Delegated类