我正在尝试使用不同的类加载器来加载特定的类,并查看该类中的静态变量是否可以具有不同的实例.
基本上,我正在尝试编写Stephen C在此答案中提到的代码.
这是我的课程:
CustomClassLoader.java
class CustomClassLoader extends ClassLoader
{
public Class loadClass(String classname) throws ClassNotFoundException {
return super.loadClass(classname, true);
}
}
Run Code Online (Sandbox Code Playgroud)
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));
}
}
Run Code Online (Sandbox Code Playgroud)
A.java(包含静态变量)
class A {
public static int b = 5;
}
Run Code Online (Sandbox Code Playgroud)
当我运行Test类时,我得到以下输出:
$ java Test
10
10
Run Code Online (Sandbox Code Playgroud)
我希望输出为10和5.如何让代码创建我的静态变量的两个实例?
注意:我这样做只是为了实验和学习 …
静态变量只有实例(即它们是类的一部分).例如:Math.pi
有没有办法可以有多个静态变量实例?我听说有类似的东西吗?