ClassLoader.getSystemClassLoader () против obj.getClass (). GetClassLoader (). GetSystemClassLoader () - PullRequest
0 голосов
/ 04 января 2019

Они точно такие же:

ClassLoader.getSystemClassLoader() // 1

против:

obj.getClass().getClassLoader().getSystemClassLoader() // 2
Person.class.getClassLoader().getSystemClassLoader()

Возможна ли ситуация, когда они могут дать разные результаты?

1 Ответ

0 голосов
/ 04 января 2019

Согласно ClassLoader.getSystemClassLoader() javadoc обычно это загрузчик классов, используемый для запуска приложения. Свойство java.system.class.loader можно использовать для переопределения возвращаемого загрузчика классов, однако:

Системное свойство для переопределения загрузчика системного класса не проверяется, пока виртуальная машина почти полностью не инициализирована. Код, который выполняет этот метод во время запуска, должен позаботиться о том, чтобы не кэшировать возвращаемое значение до полной инициализации системы.

В более сложных установках obj.getClass().getClassLoader() или Person.class.getClassLoader() может возвращать пользовательский загрузчик классов, например. OSGI . Это полностью зависит от этого пользовательского загрузчика классов, чтобы вернуть системный класс загрузчик. Это может выбрать не, например, поскольку он обойдет границы загрузки классов OSGI, см. этот ответ .

Таким образом, в большинстве случаев они должны быть одинаковыми, но ничто не мешает вам настроить JVM или написать программное обеспечение, которое сделает их разными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...