Либо с помощью CustomClassloader, либо с помощью Java-агента + Инструментарий API достаточно прост и прост, чтобы получить все классы, загруженные JVM. Однако список классов, которые были , инициализирован, кажется, не так легко получить. (Я действительно задаюсь вопросом, есть ли способ получить его)Как узнать, был ли класс инициализирован или нет?
Итак, есть ли способ узнать, был ли инициализирован класс?
- Спасибо заранее
Почему вы хотите сделать это? –
У меня есть часть программного обеспечения, которое уже выполняет классы и добавляет определенное статическое поле в каждый класс (который я хотел бы собирать после выполнения программы). поскольку я точно знаю, какие классы были загружены, я могу легко получить это поле путем отражения. однако, если класс X был загружен, но не инициализирован, отражение вызовет статический конструктор класса, который инициализирует все статические переменные и т. д., поэтому, если есть способ узнать, что конкретный класс X не был инициализированный, я даже не попытаюсь получить статическое поле из этого класса. – josecampos
Если у вас уже есть классы инструментов, вы можете добавить статический инициализатор к классам с кодом, который будет их собирать, например 'MyClassesCollector.list.add (MethodHandles.look.add). LookupClass());' Также агенты сервисной службы могут это сделать , но они заморозят целевой процесс. –