Можно привести пример, когда static блок инициализации отрабатывает 2 раза?
Вы правильно слышали, что блок статической инициализации отрабатывает столько раз, сколько класс загружается classloader-ом. Но так как classloader не будет дважды загружать класс, единственный способ добиться повторного вызова блока статической инициализации - это использовать второй classloader:
SomeClass.java
package com.example;
public class SomeClass {
static {
System.out.println("Static initialization");
}
}
Компилируем и упаковываем
> javac -d test SomeClass.java
> jar cf test.jar -C test .
Main.java
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class Main {
public static void main(String args[]) throws MalformedURLException {
String pathToJar = "file:////D:/playground/java/test.jar";
String className = "com.example.SomeClass";
URL url = new URL(pathToJar);
try (URLClassLoader cl1 = new URLClassLoader(new URL[] { url });
URLClassLoader cl2 = new URLClassLoader(new URL[] { url })) {
Class<?> c1 = cl1.loadClass(className);
Class<?> c2 = cl2.loadClass(className);
c1.newInstance();
c2.newInstance();
}
catch (InstantiationException | IllegalAccessException | ClassNotFoundException exc) {
exc.printStackTrace();
}
catch (IOException exc) {
exc.printStackTrace();
}
}
}
Компилируем и запускаем
> javac Main.java
> java Main
Вывод, как и ожидалось
Static initialization
Static initialization
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Очень часто в java создаются новые объекты для различных, и порой, примитивнейших целейНапример rowMapper, дто для перегонки с энтити, в лямбдах...
Нужно ввести 3 массива на java,Массивы 1)Имена студентов,2)Предметы, 3)Содержат имена+предметы и ещё оценкиНужно чтоб потом выводились данные...