Я экспериментирую с использованием разных загрузчиков классов для загрузки определенного класса и проверяю, могут ли статические переменные в этом классе иметь разные экземпляры.
По сути, я пытаюсь написать код для того, что Стивен С упомянул в этом ответе .
Вот мои классы:
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. Как я могу заставить код создать два экземпляра моей статической переменной?
ПримечаниеЯ делаю это только для экспериментов и обучения, но мне было бы интересно узнать, может ли это быть в реальном мире.