Это код, который у меня есть:
public class StupidClass {
static {
System.out.println("Stupid class loaded!");
}
}
И тесты, которые у меня есть, которые я запускаю отдельно.
import org.junit.Test;
public class StupidTest {
@Test
public void foo() throws ClassNotFoundException {
final Class<?> stupidClass = Class.forName("StupidClass");
System.out.println(stupidClass.getSimpleName());
}
@Test
public void bar() throws ClassNotFoundException {
final Class<StupidClass> stupidClassClass = StupidClass.class;
System.out.println(stupidClassClass.getSimpleName());
}
}
Когда я запустил тест foo, я увижу:
Stupid class loaded!
StupidClass
Но когда я запускаю тест bar, я вижу следующее:
StupidClass
Цитата из эта страница.
Объекты класса автоматически создаются виртуальной виртуальной машиной Java Virtual Загружается машина как классы и вызовы метода defineClass в загрузчике классов.
Итак, я понимаю, что в тестовой панели загружен класс Stupid, иначе я бы увидел нуль, я думаю? Таким образом, объект класса создается, потому что сам класс загружается.
И теперь, ссылаясь на эту страницу
Статические блоки инициализации запускаются, когда JVM (загрузчик классов - быть конкретным) загружает StaticClass (что происходит в первый раз ссылка на код).
Итак, я ожидаю увидеть, что "Stupid class загружен!" текст в тестовой панели, но я не знаю.
Также цитируется Мышление в Java
Каждый из классов Candy, Gum и Cookie имеет статическое предложение, которое выполняется, когда класс загружается в первый раз.
который не очень точен, кажется.
Что мне не хватает?