我正在尝试使用不同的类加载器来加载特定的类,并查看该类中的静态变量是否可以具有不同的实例。静态变量的多个实例
基本上,我试图编写代码为斯蒂芬C在this answer提及。
这里是我的课:
CustomClassLoader.java
class CustomClassLoader extends ClassLoader
{
public Class loadClass(String classname) throws ClassNotFoundException {
return super.loadClass(classname, true);
}
}
Test.java(包含驱动程序)
class Test {
public static void main(String[] args) throws Exception {
CustomClassLoader c1 = new CustomClassLoader();
CustomClassLoader c2 = new CustomClassLoader();
Class m1, m2;
m1 = c1.loadClass("A");
m2 = c2.loadClass("A");
m1.getField("b").set(null, 10);
System.out.println(m1.getField("b").get(null));
System.out.println(m2.getField("b").get(null));
}
}
A.java(其中包含静态变量)
class A {
public static int b = 5;
}
当我运行测试类,我得到下面的输出:
$ java Test
10
10
我预期的输出为10和5我怎样才能使代码创建我的静态变量的两个实例?
注意:我只是为了实验和学习而这样做 - 但我很想知道是否可以有任何实际应用。
谢谢,保罗。我会尝试加载这些类而不调用'super.loadClass()'。你能推荐任何解释的好资源吗? – AbdullahC 2011-05-10 12:40:05
我已经更新了我上面的答案。除了http://www.javaworld.com/javaworld/jw-10-1996/jw-10-indepth.html,恐怕我不知道任何好的教程。 – 2011-05-10 12:55:20
你的代码编译完美,但我得到以下例外的线,要么设置或获得'b':'在线程中的异常“主要”java.lang.IllegalAccessException:类测试不能访问类A的成员与修饰符“公共静态“'。 – AbdullahC 2011-05-11 03:48:33