怎么都想不到答案....同一jvm static变量相同 这都小和尚念经样记住的 不知道怎么回答这个问题  

解决方案 »

  1.   

    用不同的ClassLoader load同一个类,他们的static变量应该是可以不同的吧,不过没有试过
      

  2.   

    也听过这句话。
    在java中有Bootstrap,ExtClassLoader,AppClassLoader三个加载器,其关系大致为:Bootstrap(爷爷,本地代码写的),
        -ExtClassLoader(老爸),
          -AppClassLoader(儿子)在加载新类时,会先判断其祖宗加载器是否已经加载了,如果没有方才加载。所以我觉得默认情况下是不会出现这种情况的。但如果,你整成这样:Bootstrap(爷爷)
        -ExtClassLoade(老爸)
          -AppClassLoader(儿子)
             -牛头ClassLoader(牛孙子,自定义)
             -马面ClassLoader(马孙子,自定义)    然后控制"牛头ClassLoader","马面ClassLoader" 去加载一个"白痴类.class"(例如包含static变量)。此时,"牛头ClassLoader","马面ClassLoader"都认为其父加载器没有加载"白痴类.class",故而造成加载了两个"白痴类.class",而他们之间可以说是毫无关系的,因此其中的static变量应该是可以不同的。呵呵,纯属臆测,期待高人啊
      

  3.   

    class Test { public static int i = 10 }
    class ClassLoaderA extends ClassLoader {}
    class ClassLoaderB extends ClassLoader {}
    Test t1 = (Test)ClassLoaderA.loadClass("com.Test").newInstance();
    Test t2 = (Test)ClassLoaderB.loadClass("com.Test").newInstance();
    t1.i = 100;
    t2.i = 1000;
    System.out.println(t1.i, t2.i);
    类似这样吧,没运行过
      

  4.   

    4楼就打个比方嘛,应该是在ClassLoaderA和ClassLoaderB里override loadClass方法,不要委托给super,然后就可以得到不同的static变量了
      

  5.   

    举个例子1.建立父类Super和子类Sub,编译java文件。
    如下class Super{
     final String A = "1";}class Sub extends Super{
     public void disp(){
      System.out.println(Super.A);
     }
    }2.更改Super中A的值,只重新编译Super类。此时,Super中的Super.A和Sub中的Super.A的值,不同的可能性非常大。
      

  6.   

    class A{  static string str="value" ; }
    class B{  
      static {
        A.str="new value";
       } 
    }System.out.println(A.str);  //value 
    System.out.println(A.str);  //new value;又没有说 final 之类的 一个变量 他值本来就是变的 
      

  7.   


    忘记static了
    class Super{
     final static String A = "1";}class Sub extends Super{
     public void disp(){
      System.out.println(Super.A);
     }
    }
      

  8.   

    17楼说的那还是同一个static变量吗?