如果我只修改了class A里面的某些内容,并且这次修改并不影响其他与class A有关的class(比如其他class调了A的一些方法,常数,变量等),然后我只重新编译A,不重新编译那些与A关联的class,那这样对系统有没有什么影响,如果有,有哪些影响?

解决方案 »

  1.   

    只要不修改Class A的方法(包括参数、方法名和返回值)和可public成员,应该不会造成影响
      

  2.   

    对了,你如果增加了方法,也没有问题,但删除了被使用的方法,或者修改了不能overload的方法参数,则不行
      

  3.   

    有影响,如果你在其它类里面使用这个类对象的某个函数,那么,把这个函数修改或是删除后可能导致其它的class也报错误。所以最好还是把相关的.java文件重新 compile 一次
      

  4.   

    在eclipse里面我建了以下两个java文件A和B如下:
    public class A {
    public static final boolean flg = 0 == 0;
    }

    public class B {
     public static void main(String[] arg) {
        System.out.println("test"+ A.flg);
     }
    }编译上面A和B以后得到class文件,然后我将其中的B再反编译成java文件得到的是public class B {
        public B(){}    public static void main(String args[]){
            System.out.println("testtrue");
        }
    },然后我修改A文件,改为public class A {
     public static final boolean flg = "0".equals("0");
    }
    在eclipse中重新编译,与之关联的B也被重新编译了,我将B再反编译成java文件得到的是
    public class B {
        public B(){}    public static void main(String args[]){
            System.out.println((new StringBuilder("test")).append(A.flg).toString());
        }
    }虽然前后两次编译的class运行结果都是testtrue,但是编译出来的class还是和我想象的不一样,JVM似乎做了某些优化.有没有哪位高手能分析一下JAVA的编译机制.
      

  5.   

    由于Java语言是解释执行的,不会有影响,在其他类对A类进行引用的时候,每次都找到A的.class文件,然后加载这个文件,调用相应的方法。其他的不需要重新编译,由于每次都是重新加载,这样当然每次加载的都是最新的A.class文件了。
      

  6.   


    加载和编译是两码事吧.不编译怎么会得到最新的class文件呢.