Spec-Zone.ru › OpenJDK 24

Класс ClassLoader

java.lang.Object
java.lang.ClassLoader
Direct Known Subclasses:
SecureClassLoader
public abstract class ClassLoader extends Object
Класс-загрузчик — это объект, ответственный за загрузку классов. Класс ClassLoader является абстрактным классом. Учитывая бинарное имя класса, класс-загрузчик должен попытаться найти или сгенерировать данные, которые составляют определение класса. Типичная стратегия заключается в преобразовании имени в имя файла и затем чтении «файла класса» с таким именем из файловой системы.

Каждый объект Class содержит ссылку reference на класс-загрузчик, который определил его.

Объекты для массивов классов не создаются классами-загрузчиками, а создаются автоматически по мере необходимости Java-средой выполнения. Класс-загрузчик для класса массива, возвращаемый методом Class.getClassLoader(), совпадает с классом-загрузчиком его типа элементов; если тип элемента является примитивным типом, то у класса массива нет класса-загрузчика.

Приложения реализуют подклассы ClassLoader для расширения способа динамической загрузки классов Java-виртуальной машиной.

Помимо загрузки классов, класс-загрузчик также отвечает за поиск ресурсов. Ресурс — это данные (например, файл «.class», данные конфигурации или изображение), которые идентифицируются абстрактным именем пути, разделенным символом '/'. Ресурсы обычно упаковываются с приложением или библиотекой, чтобы их можно было найти кодом в приложении или библиотеке. В некоторых случаях ресурсы включаются для того, чтобы их можно было найти другим библиотекам.

Класс ClassLoader использует модель делегирования для поиска классов и ресурсов. Каждый экземпляр ClassLoader имеет связанный родительский класс-загрузчик. При запросе поиска класса или ресурса экземпляр ClassLoader обычно делегирует поиск класса или ресурса родительскому классу-загрузчику перед попыткой найти класс или ресурс самостоятельно.

Классы-загрузчики, которые поддерживают одновременную загрузку классов, называются параллельными классами-загрузчиками и обязаны зарегистрировать себя во время инициализации класса, вызвав метод ClassLoader.registerAsParallelCapable. Обратите внимание, что класс ClassLoader по умолчанию зарегистрирован как параллельный. Однако его подклассы все равно должны зарегистрировать себя, если они параллельны. В средах, в которых модель делегирования не является строго иерархической, классы-загрузчики должны быть параллельными, в противном случае загрузка класса может привести к тупиковой ситуации, так как блокировка загрузчика удерживается на все время процесса загрузки класса (см. loadClass методы).

Встроенные классы-загрузчики во время выполнения

Java-среда выполнения имеет следующие встроенные классы-загрузчики:
  • Bootstrap class loader. Это встроенный класс-загрузчик виртуальной машины, обычно представленный как null, и не имеет родителя.

  • Platform class loader. Класс-загрузчик платформы отвечает за загрузку платформенных классов. Платформенные классы включают API платформы Java SE, их классы реализации и специфичные для JDK классы времени выполнения, которые определены классом-загрузчиком платформы или его предками. Класс-загрузчик платформы может использоваться в качестве родителя экземпляра ClassLoader.

    Для возможности обновления/переопределения модулей, определенных для класс-загрузчика платформы, и в тех случаях, когда обновленные модули считывают модули, определенные для классов-загрузчиков, отличных от класс-загрузчика платформы и его предков, класс-загрузчик платформы может быть вынужден делегировать другим классам-загрузчикам, например, классу-загрузчику приложения. Другими словами, классы в именованных модулях, определенные для классов-загрузчиков, отличных от класс-загрузчика платформы и его предков, могут быть видны классу-загрузчику платформы.

  • System class loader. Он также известен как класс-загрузчик приложения и отличается от класса-загрузчика платформы. Класс-загрузчик системы обычно используется для определения классов в пути приложения, пути модуля и специфичных для JDK инструментов. Класс-загрузчик платформы является родителем или предком класса-загрузчика системы, поэтому класс-загрузчик системы может загружать платформенные классы, делегируя их родительскому классу.

Обычно Java-виртуальная машина загружает классы из локальной файловой системы в зависимости от платформы. Однако некоторые классы могут не происходить из файла; они могут происходить из других источников, таких как сеть, или их может создавать приложение. Метод defineClass преобразует массив байтов в экземпляр класса Class. Экземпляры этого вновь определенного класса можно создать, используя Class.newInstance.

Методы и конструкторы объектов, созданных классом-загрузчиком, могут ссылаться на другие классы. Для определения ссылаемых классов Java-виртуальная машина вызывает метод loadClass класса-загрузчика, который первоначально создал класс.

Например, приложение может создать сетевой класс-загрузчик для загрузки файлов классов с сервера. Пример кода может выглядеть следующим образом:

   ClassLoader loader = new NetworkClassLoader(host, port);
   Object main = loader.loadClass("Main", true).newInstance();
        . . .
 

Подкласс сетевого класса-загрузчика должен определить методы findClass и loadClassData для загрузки класса из сети. После загрузки байтов, составляющих класс, он должен использовать метод defineClass для создания экземпляра класса. Пример реализации:

     class NetworkClassLoader extends ClassLoader {
         String host;
         int port;

         public Class findClass(String name) {
             byte[] b = loadClassData(name);
             return defineClass(name, b, 0, b.length);
         }

         private byte[] loadClassData(String name) {
             // load the class data from the connection
              . . .
         }
     }
 

Бинарные имена

Любое имя класса, предоставляемое в качестве параметра String методам в ClassLoader, должно быть бинарным именем, как определено в Спецификации языка Java.

Примеры допустимых имен классов:

   "java.lang.String"
   "javax.swing.JSpinner$DefaultEditor"
   "java.security.KeyStore$Builder$FileBuilder$1"
   "java.net.URLClassLoader$3$1"
 

Любое имя пакета, предоставляемое в качестве параметра String методам в ClassLoader, должно быть либо пустой строкой (что обозначает безымянный пакет), либо полным квалифицированным именем, как определено в Спецификации языка Java.

См. Спецификацию языка Java:
6.7 Полные квалифицированные имена и канонические имена
13.1 Форма бинарного файла
С момента:
1.0
См. также:
  • resolveClass(Class)

Краткое описание конструкторов

ClassLoader()
ClassLoader(ClassLoader parent)
ClassLoader(String name, ClassLoader parent)
Модификатор Конструктор Описание
protected
Создаёт новый загрузчик классов, используя загрузчик родительских классов, возвращаемый методом getSystemClassLoader(), в качестве родительского загрузчика.
protected
Создаёт новый загрузчик классов, используя указанный родительский загрузчик классов для делегирования.
protected
Создаёт новый загрузчик классов с указанным именем и использует указанный родительский загрузчик классов для делегирования.

Краткое описание методов

Модификатор и тип Метод Описание
void clearAssertionStatus()
Устанавливает состояние утверждений по умолчанию для этого загрузчика классов на false и отбрасывает любые настройки пакетов или классов, связанные с загрузчиком классов.
protected final Class<?> defineClass(byte[] b, int off, int len)
Устаревший.
Заменён на defineClass(String, byte[], int, int)
protected final Class<?> defineClass(String name, byte[] b, int off, int len)
Преобразует массив байтов в экземпляр класса Class.
protected final Class<?> defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain)
Преобразует массив байтов в экземпляр класса Class с заданным ProtectionDomain.
protected final Class<?> defineClass(String name, ByteBuffer b, ProtectionDomain protectionDomain)
Преобразует ByteBuffer в экземпляр класса Class с заданным ProtectionDomain.
protected Package definePackage(String name, String specTitle, String specVersion, String specVendor, String implTitle, String implVersion, String implVendor, URL sealBase)
Определяет пакет по имени в этом ClassLoader.
protected Class<?> findClass(String name)
Находит класс с указанным бинарным именем.
protected Class<?> findClass(String moduleName, String name)
Находит класс с заданным бинарным именем в модуле, определённом этим загрузчиком классов.
protected String findLibrary(String libname)
Возвращает абсолютный путь к библиотеке нативных функций.
protected final Class<?> findLoadedClass(String name)
Возвращает класс с заданным бинарным именем, если этот загрузчик был зарегистрирован виртуальной машиной Java как инициирующий загрузчик класса с этим бинарным именем.
protected URL findResource(String name)
Находит ресурс с заданным именем.
protected URL findResource(String moduleName, String name)
Возвращает URL-адрес ресурса в модуле, определённом этим загрузчиком классов.
protected Enumeration<URL> findResources(String name)
Возвращает перечисление объектов URL, представляющих все ресурсы с заданным именем.
protected final Class<?> findSystemClass(String name)
Находит класс с указанным бинарным именем, загружая его при необходимости.
protected Object getClassLoadingLock(String className)
Возвращает объект блокировки для операций загрузки классов.
final Package getDefinedPackage(String name)
Возвращает Package заданного имени, определённого этим загрузчиком классов.
final Package[] getDefinedPackages()
Возвращает все Package, определённые этим загрузчиком классов.
String getName()
Возвращает имя этого загрузчика классов или null, если этот загрузчик классов не имеет имени.
protected Package getPackage(String name)
Устаревший.
Если несколько загрузчиков классов делегируют друг другу и определяют классы с одинаковым именем пакета, и один из таких загрузчиков полагается на поведение поиска getPackage для возврата Package от родительского загрузчика, то свойства, раскрываемые Package, могут не соответствовать ожиданиям в остальной части программы.
protected Package[] getPackages()
Возвращает все Package, определённые этим загрузчиком классов и его предками.
final ClassLoader getParent()
Возвращает родительский загрузчик классов для делегирования.
static ClassLoader getPlatformClassLoader()
Возвращает загрузчик платформенных классов.
URL getResource(String name)
Находит ресурс с заданным именем.
InputStream getResourceAsStream(String name)
Возвращает поток ввода для чтения указанного ресурса.
Enumeration<URL> getResources(String name)
Находит все ресурсы с заданным именем.
static ClassLoader getSystemClassLoader()
Возвращает системный загрузчик классов.
static URL getSystemResource(String name)
Ищет ресурс с заданным именем в пути поиска, используемом для загрузки классов.
static InputStream getSystemResourceAsStream(String name)
Открывает для чтения ресурс с заданным именем из пути поиска, используемого для загрузки классов.
static Enumeration<URL> getSystemResources(String name)
Находит все ресурсы с заданным именем из пути поиска, используемого для загрузки классов.
final Module getUnnamedModule()
Возвращает безымянный Module для этого загрузчика классов.
final boolean isRegisteredAsParallelCapable()
Возвращает true, если этот загрузчик классов зарегистрирован как потокобезопасный, иначе false.
Class<?> loadClass(String name)
Загружает класс с указанным бинарным именем.
protected Class<?> loadClass(String name, boolean resolve)
Загружает класс с указанным бинарным именем.
protected static boolean registerAsParallelCapable()
Регистрирует вызывающего как потокобезопасный.
protected final void resolveClass(Class<?> c)
Связывает указанный класс.
Stream<URL> resources(String name)
Возвращает поток, элементы которого являются URL-адресами всех ресурсов с заданным именем.
void setClassAssertionStatus(String className, boolean enabled)
Устанавливает желаемое состояние утверждений для класса верхнего уровня с заданным именем в этом загрузчике классов и всех вложенных классов.
void setDefaultAssertionStatus(boolean enabled)
Устанавливает состояние утверждений по умолчанию для этого загрузчика классов.
void setPackageAssertionStatus(String packageName, boolean enabled)
Устанавливает состояние утверждений по умолчанию для указанного пакета.
protected final void setSigners(Class<?> c, Object[] signers)
Устанавливает подписи класса.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

ClassLoader

protected ClassLoader(String name, ClassLoader parent)
Создаёт новый загрузчик классов заданного имени, используя указанный родительский загрузчик классов для делегирования.
Примечание API:
Если родительский загрузчик указан как null (для загрузчика Bootstrap), нет гарантии, что все платформенные классы будут видны.
Параметры:
name - имя загрузчика классов; или null, если имя не указано
parent - родительский загрузчик классов
Исключения:
IllegalArgumentException - если заданное имя пустое.
С:
9

ClassLoader

protected ClassLoader(ClassLoader parent)
Создаёт новый загрузчик классов, используя указанный родительский загрузчик классов для делегирования.
Примечание API:
Если родительский загрузчик указан как null (для загрузчика Bootstrap), нет гарантии, что все платформенные классы будут видны.
Параметры:
parent - Родительский загрузчик классов
С:
1.2

ClassLoader

protected ClassLoader()
Создаёт новый загрузчик классов, используя загрузчик системных классов ClassLoader, возвращаемый методом getSystemClassLoader(), как родительский загрузчик классов.

Подробное описание методов

getName

public String getName()
Возвращает имя этого загрузчика классов или null, если этот загрузчик классов не имеет имени.
Примечание API:
Этот метод не является final для обеспечения совместимости. Если этот метод переопределён, он должен возвращать то же имя, что и при создании этого загрузчика классов.
Возвращает:
Имя этого загрузчика классов; или null, если этот загрузчик классов не имеет имени.
С:
9

loadClass

public Class<?> loadClass(String name) throws ClassNotFoundException
Загружает класс с заданным бинарным именем. Этот метод ищет классы так же, как и метод loadClass(String, boolean). Он вызывается виртуальной машиной Java для разрешения ссылок на классы. Вызов этого метода эквивалентен вызову loadClass(name, false).
Параметры:
name - Бинарное имя класса
Возвращает:
Результат — объект Class
Исключения:
ClassNotFoundException - Если класс не был найден

loadClass

protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
Загружает класс с заданным бинарным именем. Реализация по умолчанию этого метода ищет классы в следующем порядке:
  1. Вызов findLoadedClass(String) для проверки, загружен ли класс.

  2. Вызов метода loadClass на родительском загрузчике классов. Если родительским является null, используется встроенный в виртуальную машину загрузчик классов.

  3. Вызов метода findClass(String) для поиска класса.

Если класс был найден с помощью указанных шагов, и флаг resolve имеет значение true, этот метод также вызовет метод resolveClass(Class) на результирующем объекте Class.

Подклассы ClassLoader рекомендуют переопределить findClass(String), а не этот метод.

Если не переопределён, этот метод синхронизируется на результате метода getClassLoadingLock на протяжении всего процесса загрузки класса.

Параметры:
name - Бинарное имя класса
resolve - Если true, разрешить класс
Возвращает:
Результат — объект Class
Исключения:
ClassNotFoundException - Если класс не был найден

getClassLoadingLock

protected Object getClassLoadingLock(String className)
Возвращает объект блокировки для операций загрузки классов.
Примечание API:
Этот метод позволяет многопоточным загрузчикам классов реализовывать более тонкую схему блокировки, чтобы несколько потоков могли загружать классы одновременно без тупиков. Для загрузчиков классов, не поддерживающих параллелизм, объект ClassLoader синхронизируется во время операций загрузки классов. Загрузчики классов с неиерархическим делегированием должны быть зарегистрированы как поддерживающие параллелизм для предотвращения тупиков.
Требования к реализации:
Если этот объект ClassLoader зарегистрирован как поддерживающий параллелизм, этот метод возвращает выделенный объект, связанный с заданным именем класса. В противном случае этот метод возвращает этот объект ClassLoader.
Параметры:
className - Имя класса, который необходимо загрузить
Возвращает:
Объект блокировки для операций загрузки классов
Исключения:
NullPointerException - Если зарегистрировано как поддерживающее параллелизм, и className имеет значение null
С:
1.7
См. также:
  • loadClass(String, boolean)

findClass

protected Class<?> findClass(String name) throws ClassNotFoundException
Ищет класс с заданным бинарным именем. Этот метод должен переопределяться реализациями загрузчиков классов, следующими модели делегирования при загрузке классов, и вызывается методом loadClass после проверки родительского загрузчика классов на наличие запрошенного класса.
Требования к реализации:
Реализация по умолчанию генерирует исключение ClassNotFoundException.
Параметры:
name - Бинарное имя класса
Возвращает:
Результат — объект Class
Исключения:
ClassNotFoundException - Если класс не был найден
С:
1.2

findClass

protected Class<?> findClass(String moduleName, String name)
Находит класс с заданным бинарным именем в модуле, определённом для этого загрузчика классов. Реализации загрузчиков классов, поддерживающие загрузку из модулей, должны переопределить этот метод.
Примечание API:
Этот метод возвращает null вместо генерации исключения ClassNotFoundException, если класс не был найден.
Требования к реализации:
Реализация по умолчанию пытается найти класс, вызывая findClass(String), когда модуль moduleName является null. В противном случае возвращается null.
Параметры:
moduleName - Имя модуля; или null, чтобы найти класс в безымянном модуле для этого загрузчика классов
name - Бинарное имя класса
Возвращает:
Результат — объект Class, или null, если класс не был найден.
С:
9

defineClass

@Deprecated(since="1.1") protected final Class<?> defineClass(byte[] b, int off, int len) throws ClassFormatError
Устарело.
Заменено на defineClass(String, byte[], int, int)
Преобразует массив байтов в экземпляр класса Class. Прежде чем Class можно будет использовать, его необходимо разрешить. Этот метод устарел в пользу версии, которая принимает бинарное имя в качестве первого аргумента, и является более безопасным.
Параметры:
b - Байты, составляющие данные класса. Байты в позициях off по off+len-1 должны иметь формат допустимого файла класса, как определено в Спецификации виртуальной машины Java.
off - Начальный смещение в b данных класса
len - Длина данных класса
Возвращает:
Объект Class, созданный из указанных данных класса
Исключения:
ClassFormatError - Если данные не содержали допустимый класс
IndexOutOfBoundsException - Если либо off, либо len отрицательны, или если off+len больше, чем b.length.
SecurityException - Если попытка добавить этот класс в пакет, содержащий классы, подписанные другим набором сертификатов, чем этот класс, или если попытка определить класс в пакете с полным именем, начинающимся с "java.".
См. также:
  • loadClass(String, boolean)
  • resolveClass(Class)

defineClass

protected final Class<?> defineClass(String name, byte[] b, int off, int len) throws ClassFormatError
Преобразует массив байтов в экземпляр класса Class. Перед использованием Class необходимо выполнить его разрешение.

Этот метод назначает по умолчанию ProtectionDomain новому определённому классу. Метод getPermissions класса ProtectionDomain всегда возвращает null. По умолчанию область защиты создаётся при первом вызове defineClass и используется повторно при последующих вызовах.

Чтобы назначить определённую ProtectionDomain классу, используйте метод defineClass, принимающий ProtectionDomain в качестве одного из аргументов.

Этот метод определяет пакет в этом загрузчике классов, соответствующий пакету Class (если такой пакет ещё не был определён в этом загрузчике классов). Имя определённого пакета выводится из имени бинарного файла класса, указанного в массиве байтов b. Другие свойства определённого пакета указаны в Package.

Параметры:
name - Ожидаемое имя бинарного файла класса, или null, если оно неизвестно
b - Байты, составляющие данные класса. Байты с позиций off по off+len-1 должны иметь формат файла класса, определённого в Спецификации виртуальной машины Java.
off - Начальный смещение в b данных класса.
len - Длина данных класса.
Возвращает:
Объект Class, созданный из указанных данных класса.
Исключения:
ClassFormatError - Если данные не содержат допустимого класса.
IndexOutOfBoundsException - Если либо off, либо len отрицательные, или если off+len больше, чем b.length.
SecurityException - Если предпринята попытка добавить этот класс в пакет, содержащий классы, подписанные другим набором сертификатов, чем этот класс (который не подписан), или если name начинается с "java.".
С:
1.1
См. также:
  • loadClass(String, boolean)
  • resolveClass(Class)
  • CodeSource
  • SecureClassLoader

defineClass

protected final Class<?> defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain) throws ClassFormatError
Преобразует массив байтов в экземпляр класса Class с заданной ProtectionDomain.

Если заданная ProtectionDomain равна null, то классу будет назначена область защиты по умолчанию, как указано в документации для defineClass(String, byte[], int, int). Перед использованием класса необходимо выполнить его разрешение.

Первый определённый класс в пакете определяет точный набор сертификатов, которые должны содержать все последующие классы, определённые в этом пакете. Набор сертификатов для класса извлекается из CodeSource в ProtectionDomain класса. Любые классы, добавленные в этот пакет, должны содержать тот же набор сертификатов, иначе будет брошено исключение SecurityException. Обратите внимание, что если name равно null, эта проверка не выполняется. Вы всегда должны передавать имя бинарного файла класса, который вы определяете, а также его байты. Это гарантирует, что класс, который вы определяете, действительно является тем классом, который вы ожидаете.

Если заданное name начинается с "java.", его может определить только платформенный загрузчик классов или его предки; иначе будет брошено исключение SecurityException. Если name не равно null, оно должно быть равно имени бинарного файла класса, указанного в массиве байтов b, иначе будет брошено исключение NoClassDefFoundError.

Этот метод определяет пакет в этом загрузчике классов, соответствующий пакету Class (если такой пакет ещё не был определён в этом загрузчике классов). Имя определённого пакета выводится из имени бинарного файла класса, указанного в массиве байтов b. Другие свойства определённого пакета указаны в Package.

Параметры:
name - Ожидаемое имя бинарного файла класса, или null, если оно неизвестно
b - Байты, составляющие данные класса. Байты с позиций off по off+len-1 должны иметь формат файла класса, определённого в Спецификации виртуальной машины Java.
off - Начальный смещение в b данных класса.
len - Длина данных класса.
protectionDomain - ProtectionDomain класса.
Возвращает:
Объект Class, созданный из данных, и ProtectionDomain.
Исключения:
ClassFormatError - Если данные не содержат допустимого класса.
NoClassDefFoundError - Если name не равно null и не равно имени бинарного файла класса, указанного в b
IndexOutOfBoundsException - Если либо off, либо len отрицательные, или если off+len больше, чем b.length.
SecurityException - Если предпринята попытка добавить этот класс в пакет, содержащий классы, подписанные другим набором сертификатов, чем этот класс, или если name начинается с "java.", и этот загрузчик классов не является платформенным загрузчиком классов или его предком.

defineClass

protected final Class<?> defineClass(String name, ByteBuffer b, ProtectionDomain protectionDomain) throws ClassFormatError
Преобразует ByteBuffer в экземпляр класса Class с заданной ProtectionDomain. Если заданная ProtectionDomain равна null, то классу будет назначена область защиты по умолчанию, как указано в документации для defineClass(String, byte[], int, int). Перед использованием класса необходимо выполнить его разрешение.

Правила, согласно которым первый определённый класс в пакете определяет набор сертификатов для пакета, ограничения на имена классов и определённый пакет класса, идентичны правилам, указанным в документации для defineClass(String, byte[], int, int, ProtectionDomain).

Вызов этого метода в форме cl.defineClass(name, bBuffer, pd) даёт точно такой же результат, как и операторы

...
byte[] temp = new byte[bBuffer.remaining()];
bBuffer.get(temp);
return cl.defineClass(name, temp, 0, temp.length, pd);

Параметры:
name - Ожидаемое имя бинарного файла. класса, или null, если оно неизвестно
b - Байты, составляющие данные класса. Байты с позиций b.position() по b.position() + b.limit() -1 должны иметь формат файла класса, определённого в Спецификации виртуальной машины Java.
protectionDomain - ProtectionDomain класса, или null.
Возвращает:
Объект Class, созданный из данных, и ProtectionDomain.
Исключения:
ClassFormatError - Если данные не содержат допустимого класса.
NoClassDefFoundError - Если name не равно null и не равно имени бинарного файла класса, указанного в b
SecurityException - Если предпринята попытка добавить этот класс в пакет, содержащий классы, подписанные другим набором сертификатов, чем этот класс, или если name начинается с "java.".
С:
1.5
См. также:
  • defineClass(String, byte[], int, int, ProtectionDomain)

resolveClass

protected final void resolveClass(Class<?> c)
Связывает указанный класс. Этот (вводящий в заблуждение) метод может быть использован загрузчиком классов для связывания класса. Если класс c уже связан, то этот метод просто возвращает. В противном случае класс связывается, как описано в главе "Выполнение" Спецификации языка Java.
Параметры:
c - Класс для связывания
Исключения:
NullPointerException - Если c равно null.
См. также:
  • defineClass(String, byte[], int, int)
END_OF_DOCUMENT_MARKER

findSystemClass

protected final Class<?> findSystemClass(String name) throws ClassNotFoundException
Находит класс с заданным именем двоичного файла, загружая его при необходимости.

Этот метод загружает класс через системный загрузчик классов (см. getSystemClassLoader()). Возвращаемый объект класса Class может иметь более одного ClassLoader, связанного с ним. Подклассы ClassLoader обычно не должны вызывать этот метод, так как большинству загрузчиков классов нужно переопределять только findClass(String).

Parameters:
name - Имя двоичного файла класса
Returns:
Объект класса Class для указанного name
Throws:
ClassNotFoundException - Если класс не найден
See Also:
  • ClassLoader(ClassLoader)
  • getParent()

findLoadedClass

protected final Class<?> findLoadedClass(String name)
Возвращает класс с заданным именем двоичного файла, если этот загрузчик был записан виртуальной машиной Java как инициализирующий загрузчик класса с этим именем двоичного файла. В противном случае возвращается null.
Parameters:
name - Имя двоичного файла класса
Returns:
Объект класса Class или null, если класс не загружен
Since:
1.1

setSigners

protected final void setSigners(Class<?> c, Object[] signers)
Устанавливает подписывающие лица класса. Это должно вызываться после определения класса.
Parameters:
c - Объект класса Class
signers - Подписывающие лица для класса
Since:
1.1

findResource

protected URL findResource(String moduleName, String name) throws IOException
Возвращает URL ресурса в модуле, определенном в этом загрузчике классов. Реализации загрузчиков классов, которые поддерживают загрузку из модулей, должны переопределять этот метод.
API Note:
Этот метод является основой для методов Class.getResource, Class.getResourceAsStream и Module.getResourceAsStream. Он не подчиняется правилам инкапсуляции, заданным Module.getResourceAsStream.
Implementation Requirements:
Стандартная реализация пытается найти ресурс, вызвав findResource(String), когда moduleName является null. В противном случае возвращает null.
Parameters:
moduleName - Имя модуля; или null для поиска ресурса в безымянном модуле для этого загрузчика классов
name - Имя ресурса
Returns:
URL ресурса; null, если ресурс не найден, URL не может быть построен для определения местоположения ресурса или в загрузчике классов не определен модуль с данным именем.
Throws:
IOException - Если произошли ошибки ввода-вывода
Since:
9
See Also:
  • ModuleReader.find(String)

getResource

public URL getResource(String name)
Находит ресурс с заданным именем. Ресурс — это данные (изображения, аудио, текст и т. д.), к которым можно получить доступ с помощью кода класса независимо от расположения кода.

Имя ресурса — это путь с разделителями '/', идентифицирующий ресурс.

Ресурсы в именованных модулях подчиняются правилам инкапсуляции, заданным Module.getResourceAsStream. Кроме того, за исключением специального случая, когда имя ресурса оканчивается на ".class", этот метод будет находить ресурсы только в пакетах именованных модулей, когда пакет opened безусловно (даже если вызывающий этот метод находится в том же модуле, что и ресурс).

API Note:
Когда несколько модулей определены в одном загрузчике классов, и более одного модуля содержит ресурс с заданным именем, порядок поиска модулей не определен и может быть очень непредсказуемым. При переопределении этого метода рекомендуется, чтобы реализация обеспечивала согласованность любой делегации с методом getResources(String).
Implementation Requirements:
Стандартная реализация сначала ищет ресурс в родительском загрузчике классов; если родительский загрузчик является null, то выполняется поиск по пути загрузчика классов, встроенного в виртуальную машину. Если не найден, этот метод вызовет findResource(String) для поиска ресурса.
Parameters:
name - Имя ресурса
Returns:
Объект URL для чтения ресурса; null, если ресурс не найден, URL не может быть построен для определения местоположения ресурса или ресурс находится в пакете, который не открыт безусловно.
Throws:
NullPointerException - Если name является null
Since:
1.1

getResources

public Enumeration<URL> getResources(String name) throws IOException
Находит все ресурсы с заданным именем. Ресурс — это данные (изображения, аудио, текст и т. д.), к которым можно получить доступ с помощью кода класса независимо от расположения кода.

Имя ресурса — это путь с разделителями /, идентифицирующий ресурс.

Ресурсы в именованных модулях подчиняются правилам инкапсуляции, заданным Module.getResourceAsStream. Кроме того, за исключением специального случая, когда имя ресурса оканчивается на ".class", этот метод будет находить ресурсы только в пакетах именованных модулей, когда пакет opened безусловно (даже если вызывающий этот метод находится в том же модуле, что и ресурс).

API Note:
Когда несколько модулей определены в одном загрузчике классов, и более одного модуля содержит ресурс с заданным именем, порядок не определен и может быть очень непредсказуемым. При переопределении этого метода рекомендуется, чтобы реализация обеспечивала согласованность любой делегации с методом getResource(String). Это должно гарантировать, что первый элемент, возвращаемый методом nextElement перечисления, будет тем же ресурсом, что и ресурс, который вернул бы метод getResource(String).
Implementation Requirements:
Стандартная реализация сначала ищет ресурс в родительском загрузчике классов; если родительский загрузчик является null, выполняется поиск по пути загрузчика классов, встроенного в виртуальную машину. Затем вызывается findResources(String) для поиска ресурсов с именем в этом загрузчике классов. Возвращается перечисление, элементы которого являются URL-адресами, найденными при поиске в родительском загрузчике классов, за которым следуют элементы, найденные с помощью findResources.
Parameters:
name - Имя ресурса
Returns:
Перечисление объектов URL для ресурса. Если ресурсы не найдены, перечисление будет пустым. Ресурсы, для которых нельзя создать URL или которые находятся в пакете, не открытом безусловно, не возвращаются в перечислении.
Throws:
IOException - Если произошли ошибки ввода-вывода
NullPointerException - Если name является null
Since:
1.2

ресурсы

public Stream<URL> resources(String name)
Возвращает поток, элементы которого — URL всех ресурсов с заданным именем. Ресурс — это данные (изображения, аудио, текст и т. д.), к которым код класса может получить доступ независимо от расположения кода.

Имя ресурса — это имя пути, разделенное /, которое идентифицирует ресурс.

Ресурсы будут найдены при оценке возвращаемого потока. Если оценка приводит к IOException, то исключение I/O упаковывается в UncheckedIOException, которое затем выбрасывается.

Ресурсы в именованных модулях подчиняются правилам инкапсуляции, определённым в Module.getResourceAsStream. Кроме того, за исключением специального случая, когда ресурс имеет имя, заканчивающееся на ".class", этот метод будет находить ресурсы только в пакетах именованных модулей, когда пакет opened безусловно (даже если вызывающий этот метод находится в том же модуле, что и ресурс).

Примечание API:
При переопределении этого метода рекомендуется, чтобы реализация обеспечивала согласованность любой делегации с методом getResource(String). Это должно гарантировать, что первый элемент, возвращаемый потоком, является тем же ресурсом, который возвращал бы метод getResource(String).
Требования к реализации:
Встроенная реализация вызывает getResources для поиска всех ресурсов с заданным именем и возвращает поток с элементами в перечислении в качестве источника.
Параметры:
name — имя ресурса
Возвращает:
Поток объектов ресурса URL. Если ресурсы не найдены, поток будет пустым. Ресурсы, для которых невозможно создать URL или которые находятся в пакете, не открытом безусловно, не будут включены в поток.
Выбрасывает:
NullPointerException — Если name является null
С:
9

поиск ресурса

protected URL findResource(String name)
Ищет ресурс с заданным именем. Реализации загрузчиков классов должны переопределить этот метод.

Для ресурсов в именованных модулях метод должен реализовывать правила инкапсуляции, указанные в Module getResourceAsStream метод. Кроме того, он не должен находить ресурсы, отличные от ".class", в пакетах именованных модулей, если пакет не opened безусловно.

Требования к реализации:
Встроенная реализация возвращает null.
Параметры:
name — имя ресурса
Возвращает:
Объект URL для чтения ресурса; null если ресурс не найден, объект URL не смог построить местоположение ресурса или ресурс находится в пакете, который не открыт безусловно.
С:
1.2

поиск ресурсов

protected Enumeration<URL> findResources(String name) throws IOException
Возвращает перечисление объектов URL, представляющих все ресурсы с заданным именем. Реализации загрузчиков классов должны переопределить этот метод.

Для ресурсов в именованных модулях метод должен реализовывать правила инкапсуляции, указанные в Module getResourceAsStream метод. Кроме того, он не должен находить ресурсы, отличные от ".class", в пакетах именованных модулей, если пакет не opened безусловно.

Требования к реализации:
Встроенная реализация возвращает перечисление, не содержащее элементов.
Параметры:
name — имя ресурса
Возвращает:
Перечисление объектов URL для ресурса. Если ресурсы не найдены, перечисление будет пустым. Ресурсы, для которых нельзя создать URL, или которые находятся в пакете, не открытом безусловно, не возвращаются в перечислении.
Выбрасывает:
IOException — Если возникают ошибки ввода-вывода
С:
1.2

registerAsParallelCapable

protected static boolean registerAsParallelCapable()
Регистрирует вызывающий объект как поддерживающий параллельную работу. Регистрация успешна только при выполнении всех следующих условий:
  1. экземпляр вызывающего объекта не был создан
  2. все суперклассы (кроме класса Object) вызывающего объекта зарегистрированы как поддерживающие параллельную работу

Обратите внимание, что после регистрации загрузчика класса как поддерживающего параллельную работу, его нельзя изменить обратно.

В случаях, когда этот метод вызывается из контекста, где вызывающий объект не является подклассом ClassLoader или в стеке нет фрейма вызова (например, при прямом вызове из нити JNI), выбрасывается IllegalCallerException.

Возвращает:
true, если вызывающий объект успешно зарегистрирован как поддерживающий параллельную работу, и false в противном случае.
Выбрасывает:
IllegalCallerException — если вызывающий объект не является подклассом ClassLoader
С:
1.7
См. также:
  • isRegisteredAsParallelCapable()

isRegisteredAsParallelCapable

public final boolean isRegisteredAsParallelCapable()
Возвращает true, если этот загрузчик классов зарегистрирован как поддерживающий параллельную работу, в противном случае false.
Возвращает:
true, если этот загрузчик классов поддерживает параллельную работу, в противном случае false.
С:
9
См. также:
  • registerAsParallelCapable()

getSystemResource

public static URL getSystemResource(String name)
Находит ресурс с указанным именем из пути поиска, используемого для загрузки классов. Этот метод находит ресурс через системный загрузчик классов (см. getSystemClassLoader()).

Ресурсы в именованных модулях подчиняются правилам инкапсуляции, указанным в Module.getResourceAsStream. Кроме того, за исключением специального случая, когда ресурс имеет имя, заканчивающееся на ".class", этот метод будет находить ресурсы только в пакетах именованных модулей, когда пакет opened безусловно.

Параметры:
name — имя ресурса
Возвращает:
URL к ресурсу; null если ресурс не найден, URL не может быть создан для определения местоположения ресурса или ресурс находится в пакете, который не открыт безусловно.
С:
1.1

getSystemResources

public static Enumeration<URL> getSystemResources(String name) throws IOException
Находит все ресурсы с указанным именем из пути поиска, используемого для загрузки классов. Найденные ресурсы возвращаются в виде Enumeration объектов URL.

Порядок поиска описан в документации для getSystemResource(String).

Ресурсы в именованных модулях подчиняются правилам инкапсуляции, указанным в Module.getResourceAsStream. Кроме того, за исключением специального случая, когда ресурс имеет имя, заканчивающееся на ".class", этот метод будет находить ресурсы только в пакетах именованных модулей, когда пакет opened безусловно.

Параметры:
name — имя ресурса
Возвращает:
Перечисление объектов URL для ресурса. Если ресурсы не найдены, перечисление будет пустым. Ресурсы, для которых невозможно создать URL или которые находятся в пакете, не открытом безусловно, не возвращаются в перечислении.
Выбрасывает:
IOException — Если возникают ошибки ввода-вывода
С:
1.2

getResourceAsStream

public InputStream getResourceAsStream(String name)
Возвращает поток ввода для чтения указанного ресурса.

Порядок поиска описан в документации для getResource(String).

Ресурсы в именованных модулях подчиняются правилам инкапсуляции, указанным в Module.getResourceAsStream. Кроме того, за исключением специального случая, когда ресурс имеет имя, заканчивающееся на ".class", этот метод будет находить ресурсы только в пакетах именованных модулей, когда пакет opened безусловно.

Параметры:
name — имя ресурса
Возвращает:
Поток ввода для чтения ресурса; null если ресурс не найден или ресурс находится в пакете, который не открыт безусловно.
Выбрасывает:
NullPointerException — Если name является null
С:
1.1

getSystemResourceAsStream

public static InputStream getSystemResourceAsStream(String name)
Открывает для чтения ресурс указанного имени из пути поиска, используемого для загрузки классов. Этот метод находит ресурс через системный загрузчик классов (см. getSystemClassLoader()).

Ресурсы в именованных модулях подчиняются правилам инкапсуляции, указанным в Module.getResourceAsStream. Кроме того, за исключением специального случая, когда имя ресурса оканчивается на ".class", этот метод будет находить ресурсы только в пакетах именованных модулей, когда пакет opened безусловно.

Параметры:
name - Имя ресурса
Возвращает:
Поток ввода для чтения ресурса; null, если ресурс не найден или ресурс находится в пакете, который не открыт безусловно.
С:
1.1

getParent

public final ClassLoader getParent()
Возвращает родительский загрузчик классов для делегирования. Некоторые реализации могут использовать null для представления загрузчика bootstrap-классов. Этот метод вернёт null в таких реализациях, если родительским загрузчиком этого загрузчика является загрузчик bootstrap-классов.
Возвращает:
Родительский загрузчик классов
С:
1.2

getUnnamedModule

public final Module getUnnamedModule()
Возвращает безымянный Module для этого загрузчика классов.
Возвращает:
Безымянный модуль для данного загрузчика классов
С:
9
См. также:
  • Module.isNamed()

getPlatformClassLoader

public static ClassLoader getPlatformClassLoader()
Возвращает загрузчик классов платформы. Все платформенные классы видны загрузчику платформенных классов.
Примечание реализации:
Имя встроенного загрузчика платформенных классов — "platform".
Возвращает:
Платформенный загрузчик классов.
С:
9

getSystemClassLoader

public static ClassLoader getSystemClassLoader()
Возвращает системный загрузчик классов. Это родительский загрузчик по умолчанию для новых ClassLoader экземпляров и обычно используется для запуска приложения.

Этот метод вызывается в самом начале процесса запуска среды выполнения, в этот момент он создаёт системный загрузчик классов. Этот загрузчик будет загрузчиком контекста для основного потока приложения (например, потока, вызывающего метод main основного класса).

Системный загрузчик классов по умолчанию — это зависящий от реализации экземпляр этого класса.

Если при вызове этого метода определена системная переменная "java.system.class.loader", то значение этой переменной рассматривается как имя класса, который будет возвращён как системный загрузчик классов. Класс загружается с помощью системного загрузчика по умолчанию и должен иметь публичный конструктор, принимающий один параметр типа ClassLoader, который используется в качестве родительского загрузчика. Затем экземпляр создаётся с помощью этого конструктора с системным загрузчиком по умолчанию в качестве параметра. Полученный загрузчик классов определяется как системный загрузчик классов. Во время создания загрузчик классов должен быть очень осторожен, чтобы не вызывать getSystemClassLoader(). Если обнаружено циклическое инициализирование системного загрузчика классов, то выбрасывается IllegalStateException.

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

Имя встроенного системного загрузчика классов — "app". Системная переменная "java.class.path" считывается во время ранней инициализации JVM, чтобы определить путь класса. Пустое значение свойства "java.class.path" интерпретируется по-разному в зависимости от того, является ли начальный модуль (модуль, содержащий главный класс) именованным или безымянным: если именованным, встроенный системный загрузчик классов не будет иметь путь класса и будет искать классы и ресурсы, используя путь модуля приложения; в противном случае, если безымянным, он установит путь класса в текущую рабочую директорию.

JAR-файлы в пути класса могут содержать атрибут Class-Path manifest для указания зависимых JAR-файлов, которые необходимо включить в путь класса. Class-Path записи должны удовлетворять определённым условиям для валидности (см. JAR-спецификацию файла для получения подробной информации). Некорректные Class-Path записи игнорируются. В отладочных целях проигнорированные записи могут быть напечатаны в консоль, если системная переменная jdk.net.URLClassPath.showIgnoredClassPathEntries установлена в true.

Возвращает:
Системный загрузчик классов
Исключения:
IllegalStateException - Если вызов выполняется рекурсивно во время создания загрузчика классов, указанного свойством "java.system.class.loader".
Error - Если системная переменная "java.system.class.loader" определена, но указанный класс не удалось загрузить, класс-поставщик не определяет требуемый конструктор или во время вызова этого конструктора возникает исключение. Основную причину ошибки можно получить с помощью метода Throwable.getCause().

definePackage

protected Package definePackage(String name, String specTitle, String specVersion, String specVendor, String implTitle, String implVersion, String implVendor, URL sealBase)
Определяет пакет по имени в этом ClassLoader.

Имена пакетов должны быть уникальными для загрузчика классов и не могут быть переопределены или изменены после создания.

Если загрузчик классов хочет определить пакет со специфическими свойствами, такими как информация о версии, то загрузчик классов должен вызвать этот метод definePackage перед вызовом defineClass. В противном случае, метод defineClass определит пакет в этом загрузчике классов, соответствующий пакету нового определённого класса; свойства этого определённого пакета указаны в Package.

Примечание API:
Загрузчик классов, который хочет определить пакет для классов в JAR, обычно использует заголовок, версия, поставщик из манифеста JAR. Если в манифесте JAR пакет определён как sealed, то URL файла JAR обычно используется в качестве sealBase. Если классы пакета 'p', определённые этим загрузчиком классов, загружаются из нескольких JAR, объект Package может содержать различную информацию в зависимости от первого класса пакета 'p', определённого и которого JAR-манифест был прочитан первым для явного определения пакета 'p'.

Настоятельно рекомендуется, чтобы загрузчик классов не вызывал этот метод для явного определения пакетов в именованных модулях; вместо этого пакет будет автоматически определён при определении класса. Если необходимо явно определить Package, то нужно убедиться, что все пакеты в именованном модуле определены со свойствами, указанными в Package. В противном случае, некоторые Package объекты в именованном модуле могут быть, например, sealed с разными seal base.

Параметры:
name - Имя пакета
specTitle - Название спецификации
specVersion - Версия спецификации
specVendor - Поставщик спецификации
implTitle - Название реализации
implVersion - Версия реализации
implVendor - Поставщик реализации
sealBase - Если не null, то этот пакет запечатан по отношению к указанному источнику кода URL объекту. В противном случае пакет не запечатан.
Возвращает:
Новый определённый объект пакета
Исключения:
NullPointerException - если name является null.
IllegalArgumentException - если пакет с указанным name уже определён этим загрузчиком классов
См. Спецификацию Java Virtual Machine:
5.3 Создание и загрузка
С:
1.2
См. также:
  • JAR-спецификация файла: Запечатывание пакетов

getDefinedPackage

public final Package getDefinedPackage(String name)
Возвращает Package указанного имени, который был определён этим загрузчиком классов.
Параметры:
name - Имя пакета
Возвращает:
Объект пакета указанного имени, определённого этим загрузчиком классов, или null если не найден
Исключения:
NullPointerException - если name является null.
См. Спецификацию Java Virtual Machine:
5.3 Создание и загрузка
С:
9

getDefinedPackages

public final Package[] getDefinedPackages()
Возвращает все определенные этим загрузчиком классов пакеты. Возвращаемый массив не содержит дублирующих элементов с одинаковым именем.
API Note:
Этот метод возвращает массив, а не объект типа `Enumeration` или `Iterator`, для согласованности с существующим методом getPackages().
Returns:
Массив объектов `Package`, определённых этим загрузчиком классов; или массив нулевой длины, если пакеты этим загрузчиком не определены.
См. Спецификацию виртуальной машины Java:
5.3 Создание и загрузка
Since:
9

getPackage

@Deprecated(since="9") protected Package getPackage(String name)
Deprecated.
Если несколько загрузчиков классов делегируют друг другу и определяют классы с одинаковым именем пакета, и один из таких загрузчиков полагается на поведение поиска getPackage для возврата пакета из родительского загрузчика, то свойства, экспонируемые Package, могут не соответствовать ожиданиям в остальной части программы. Например, Package будет экспонировать только аннотации из файла package-info.class, определённого родительским загрузчиком, даже если аннотации существуют в файле package-info.class, определённом дочерним загрузчиком. Более надёжный подход заключается в использовании метода getDefinedPackage(java.lang.String), который возвращает объект `Package` для указанного загрузчика классов.
Находит пакет по имени в этом загрузчике классов и его предках.

Если этот загрузчик классов определяет пакет с заданным именем, то возвращается объект `Package`. В противном случае, предки этого загрузчика классов ищутся рекурсивно (последовательно) для нахождения пакета с заданным именем.

API Note:
Загрузчик платформенных классов (platform class loader) может делегировать запросы к загрузчику приложений, но загрузчик приложений не является его предком. При вызове на платформенном загрузчике этот метод не найдёт пакеты, определённые в загрузчике приложений.
Parameters:
name - Имя пакета
Returns:
Объект `Package` с заданным именем, определённый этим загрузчиком классов или его предками; или `null`, если не найден.
Throws:
NullPointerException - если name является null.
Since:
1.2
See Also:
  • getDefinedPackage(String)

getPackages

protected Package[] getPackages()
Возвращает все пакеты, определённые этим загрузчиком классов и его предками. Возвращаемый массив может содержать более одного объекта `Package` с одинаковым именем пакета, каждый из которых определён другим загрузчиком классов в иерархии загрузчиков классов.
API Note:
Загрузчик платформенных классов (platform class loader) может делегировать запросы к загрузчику приложений. Иначе говоря, пакеты, определённые в модулях загрузчиком приложений, могут быть видимы загрузчику платформы. С другой стороны, загрузчик приложений не является его предком, и, следовательно, при вызове на платформенном загрузчике этот метод не вернёт пакеты, определённые в загрузчике приложений.
Returns:
Массив объектов `Package`, определённых этим загрузчиком классов и его предками
Since:
1.2
See Also:
  • getDefinedPackages()

findLibrary

protected String findLibrary(String libname)
Возвращает абсолютный путь к библиотеке. Виртуальная машина (VM) вызывает этот метод для поиска системных библиотек, относящихся к классам, загруженным с помощью данного загрузчика классов. Если этот метод возвращает `null`, то VM ищет библиотеку по пути, указанному в свойстве "java.library.path".
Parameters:
libname - Имя библиотеки
Returns:
Абсолютный путь к библиотеке
Since:
1.2
See Also:
  • System.loadLibrary(String)RESTRICTED
  • System.mapLibraryName(String)

setDefaultAssertionStatus

public void setDefaultAssertionStatus(boolean enabled)
Устанавливает значение по умолчанию для включения/выключения проверок (assertions) для этого загрузчика классов. Это значение определяет, будут ли включены или выключены проверки по умолчанию для классов, загруженных этим загрузчиком в будущем. Это значение может быть переопределено для каждого пакета или класса с помощью методов setPackageAssertionStatus(String, boolean) или setClassAssertionStatus(String, boolean).
Parameters:
enabled - `true`, если проверки включены по умолчанию для классов, загруженных этим загрузчиком, `false` - если выключены.
Since:
1.4

setPackageAssertionStatus

public void setPackageAssertionStatus(String packageName, boolean enabled)
Устанавливает значение по умолчанию для включения/выключения проверок (assertions) для указанного пакета. Значение по умолчанию для пакета определяет состояние проверок для классов, инициализированных в будущем, которые относятся к указанному пакету или любому его подпакету.

Подпакетом пакета с именем `p` является любой пакет, имя которого начинается с "p.". Например, javax.swing.text является подпакетом javax.swing, а java.util и java.lang.reflect являются подпакетами java.

В случае, если для данного класса применяется несколько значений по умолчанию, значение по умолчанию для самого специфичного пакета имеет приоритет над другими. Например, если для javax.lang и javax.lang.reflect установлены значения по умолчанию, то последнее значение по умолчанию применяется к классам в javax.lang.reflect.

Значения по умолчанию для пакетов имеют приоритет над значением по умолчанию загрузчика классов и могут быть переопределены на уровне отдельных классов с помощью вызова setClassAssertionStatus(String, boolean).

Parameters:
packageName - Имя пакета, для которого необходимо установить значение по умолчанию для проверок. Значение `null` обозначает неназванный пакет (см. раздел 7.4.2 спецификации языка Java).
enabled - `true`, если проверки включены по умолчанию для классов, загруженных этим загрузчиком и относящихся к указанному пакету или его подпакетам; `false` - если выключены.
Since:
1.4

setClassAssertionStatus

public void setClassAssertionStatus(String className, boolean enabled)
Устанавливает желаемое состояние проверок (assertions) для указанного верхнего уровня класса в этом загрузчике классов и всех вложенных классов. Это значение имеет приоритет над значением по умолчанию загрузчика классов и над любым значением по умолчанию для пакета. Этот метод не имеет эффекта, если указанный класс уже инициализирован. (После инициализации состояние проверок класса изменить нельзя).

Если указанный класс не является классом верхнего уровня, этот вызов не повлияет на фактическое состояние проверок для какого-либо класса.

Parameters:
className - Полное имя класса верхнего уровня, для которого необходимо установить состояние проверок.
enabled - `true`, если проверки должны быть включены для указанного класса при его инициализации; `false` - если выключены.
Since:
1.4

clearAssertionStatus

public void clearAssertionStatus()
Устанавливает значение по умолчанию для включения/выключения проверок (assertions) для этого загрузчика классов в `false` и удаляет все настройки значений по умолчанию для пакетов или отдельных классов, связанные с этим загрузчиком. Этот метод предоставляется для того, чтобы загрузчики классов могли игнорировать параметры командной строки или постоянные настройки проверок и "начать с чистого листа".
Since:
1.4

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/ClassLoader.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API