В первом случае, как показано ниже, ContextClosedEvent
будет загружено, как только будет использоваться YourClass
.
class YourClass {
static {
// Eagerly load the ContextClosedEvent class to avoid weird classloader issues
// on application shutdown in WebLogic 8.1. (Reported by Dustin Woods.)
ContextClosedEvent.class.getName();
}
}
Во втором случае, ContextClosedEvent
будет загружен, когда ваш код работает, метод loadClass
будет вызван 2 раза. Первый раз для справки ContextClosedEvent.class
(вызывается JVM), второй раз - ваш ручной вызов.
В первый раз ContextClosedEvent
фактически загружается из пути к классам. Во второй раз это зависит от вашего ContextClassLoader
. По умолчанию загрузчик классов JVM будет findLoadedClass
вместо повторной загрузки класса.
Как показано ниже, метод loadClass
будет вызван дважды при запуске метода main
.
class Main {
public static void main(String[] args) throws ClassNotFoundException {
Thread.currentThread()
.getContextClassLoader().loadClass(ContextClosedEvent.class.getName());
}
}
Чтобы увидеть, как работает статический блок, запустите этот пример
class Main {
public static void main(String[] args) {
System.out.println("main method invoked");
}
static {
System.out.println("static block invoked");
}
}