Я написал некоторый код для анализа всех пакетов / классов, которые поставляются в комплекте с API Java 1.6.Это означает, что нужно перебирать все классы, выполняя с ними функции отражения, для генерации статистики.
Ни один из этого кода на самом деле не создает экземпляры классов и не вызывает из них какие-либо методы: я просто делаю такие вещи, как вызов getDeclaredMethods()
и getDeclaredFields()
.
Это нормально для большинства классов (почти все в пакете java.*
или javax.*
).Однако некоторые другие классы ломают мою программу, вызывая исключения вроде:
WARNING: "IOP00710208: (INTERNAL) Unable to determine local hostname from InetAddress.getLocalHost().getHostName()"
org.omg.CORBA.INTERNAL: vmcid: SUN minor code: 208 completed: No
Это кажется странной проблемой.Может ли быть так, что, когда я ссылаюсь на этот класс (например, вызывая Class.forName()
), он вызывает статические конструкторы в этом классе?Например, если класс является фабричным классом или имеет конечные поля, для которых уже были созданы экземпляры?
Я решил проблему с классами, генерирующими исключения, когда смотрел на них, помещая все в блок try/catch(Throwable)
.
Мне любопытно, что вызвало эти исключения.Это, как я думал, статические конструкторы и тому подобное?Я не могу найти источник (может быть, я просто ищу не в том месте ...!) Для этих классов, поэтому я не могу проверить себя ...