Spec-Zone.ru › OpenJDK 21

Класс 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 имеет следующие встроенные загрузчики классов:
  • Загрузчик базового класса. Это встроенный загрузчик класса виртуальной машины, обычно представленный как null, и у него нет родителя.

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

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

  • Загрузчик системного класса. Он также известен как загрузчик приложения и отличается от загрузчика платформенного класса. Загрузчик системного класса обычно используется для определения классов в пути приложения, пути модулей и специфических для 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
Создаёт новый загрузчик классов, используя ClassLoader возвращённый методом 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 (для загрузчика базовых классов), то нет гарантии, что все платформенные классы будут видны.
Параметры:
name - имя загрузчика классов; или null если имя не указано
parent - родительский загрузчик классов
Исключения:
IllegalArgumentException - если заданное имя пустое.
SecurityException - если менеджер безопасности существует и его метод SecurityManager.checkCreateClassLoader() не разрешает создание нового загрузчика классов.
С:
9

ClassLoader

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

Если менеджер безопасности существует, вызывается его метод checkCreateClassLoader. Это может привести к исключению безопасности.

Примечание API:
Если родительский загрузчик указан как null (для загрузчика базовых классов), то нет гарантии, что все платформенные классы будут видны.
Параметры:
parent - Родительский загрузчик классов
Исключения:
SecurityException - Если менеджер безопасности существует и его checkCreateClassLoader метод не разрешает создание нового загрузчика классов.
С:
1.2

ClassLoader

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

Если менеджер безопасности существует, вызывается его метод checkCreateClassLoader. Это может привести к исключению безопасности.

Исключения:
SecurityException - Если менеджер безопасности существует и его checkCreateClassLoader метод не разрешает создание нового загрузчика классов.

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

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 вновь определённому классу. ProtectionDomain фактически предоставляется тот же набор разрешений, что и при вызове Policy.getPolicy().getPermissions(new CodeSource(null, null)). Домен защиты по умолчанию создаётся при первом вызове defineClass и повторно используется при последующих вызовах.

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

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

Parameters:
name - Ожидаемое имя бинарного файла класса или null, если оно неизвестно
b - Байты, составляющие данные класса. Байты в позициях off по off+len-1 должны иметь формат допустимого файла класса, как определено в Спецификации виртуальной машины Java.
off - Начальный смещение в b данных класса
len - Длина данных класса
Returns:
Объект Class, созданный из указанных данных класса.
Throws:
ClassFormatError - Если данные не содержат допустимый класс
IndexOutOfBoundsException - Если off или len отрицательны или если off+len больше b.length.
SecurityException - Если попытка добавить этот класс в пакет, содержащий классы, подписанные другим набором сертификатов, чем этот класс (который не подписан), или если name начинается с "java.".
Since:
1.1
See Also:
  • 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.

Parameters:
name - Ожидаемое бинарное имя класса или null, если оно неизвестно
b - Байты, составляющие данные класса. Байты в позициях off по off+len-1 должны иметь формат допустимого файла класса, как определено в Спецификации виртуальной машины Java.
off - Начальный смещение в b данных класса
len - Длина данных класса
protectionDomain - ProtectionDomain класса
Returns:
Объект Class созданный из данных, и ProtectionDomain.
Throws:
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);

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

resolveClass

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

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

зарегистрироватьКакПараллельноСпособный

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

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

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

Возвращает:
true если вызывающий метод успешно зарегистрирован как параллельно способный, и false в противном случае.
Исключение:
IllegalCallerException - если вызывающий метод не является подклассом ClassLoader
С:
1.7
См. также:
  • 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 безусловно.

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

getParent

public final ClassLoader getParent()
Возвращает родительский загрузчик классов для делегирования. Некоторые реализации могут использовать null для представления загрузчика базовых классов. Этот метод вернёт null в таких реализациях, если родительским загрузчиком класса является загрузчик базовых классов.
Returns:
Родительский ClassLoader
Throws:
SecurityException - Если присутствует менеджер безопасности, и загрузчик класса вызывающего метода не null и не является предком этого загрузчика, и у вызывающего метода нет RuntimePermission("getClassLoader")
Since:
1.2

getUnnamedModule

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

getPlatformClassLoader

public static ClassLoader getPlatformClassLoader()
Возвращает загрузчик платформенных классов. Все платформенные классы видны загрузчику платформенных классов.
Implementation Note:
Имя встроенного загрузчика платформенных классов — "platform".
Returns:
Загрузчик платформенных ClassLoader.
Throws:
SecurityException - Если присутствует менеджер безопасности, и загрузчик класса вызывающего метода не null, и загрузчик класса вызывающего метода не такой же или не является предком загрузчика платформенных классов, и у вызывающего метода нет RuntimePermission("getClassLoader")
Since:
9

getSystemClassLoader

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

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

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

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

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

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

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

Returns:
Системный загрузчик ClassLoader
Throws:
SecurityException - Если присутствует менеджер безопасности, и загрузчик класса вызывающего метода не null и не такой же или не является предком системного загрузчика классов, и у вызывающего метода нет RuntimePermission("getClassLoader")
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 Note:
Загрузчик классов, желающий определить пакет для классов в JAR-файле, обычно использует заголовок, информацию о версии и поставщика из манифеста JAR-файла. Если пакет задан как герметичный в манифесте JAR-файла, то URL JAR-файла обычно используется в качестве sealBase. Если классы пакета 'p' определены этим загрузчиком классов из нескольких JAR-файлов, объект Package может содержать различную информацию в зависимости от первого класса пакета 'p' , который был определён, и чьего манифеста JAR-файла был прочитан первым для явного определения пакета 'p'.

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

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

getDefinedPackage

public final Package getDefinedPackage(String name)
Возвращает Package заданного имени, определённого этим загрузчиком классов.
Parameters:
name - Имя пакета
Returns:
Package заданного имени, определённого этим загрузчиком классов, или null если не найдено
Throws:
NullPointerException - если name является null.
See Java Virtual Machine Specification:
5.3 Создание и загрузка
Since:
9

getDefinedPackages

public final Package[] getDefinedPackages()
Возвращает все Packages, определённые этим загрузчиком классов. Возвращаемый массив не содержит повторяющихся Packages с одинаковым именем.
API Note:
Этот метод возвращает массив, а не Set или Stream для согласованности с существующим методом getPackages().
Returns:
Массив объектов Package , определённых этим загрузчиком классов; или массив нулевой длины, если ни один пакет не был определён этим загрузчиком классов.
See Java Virtual Machine Specification:
5.3 Создание и загрузка
Since:
9

getPackage

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

Если этот загрузчик классов определяет Package заданного имени, то возвращается 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()
Возвращает все Packages, определённые этим загрузчиком классов и его предками. Возвращаемый массив может содержать более одного объекта Package с одинаковым именем пакета, каждый определённый другим загрузчиком классов в иерархии загрузчиков классов.
API Note:
Загрузчик платформы platform class loader может делегировать приложение загрузчику классов. Другими словами, пакеты в модулях, определённые для приложения загрузчика классов, могут быть видны загрузчику платформы классов. С другой стороны, приложение загрузчик классов не является его предком, и поэтому при вызове этого метода для загрузчика платформы классов, пакеты, определённые для приложения загрузчика классов, не будут возвращены.
Returns:
Массив объектов Package , определённых этим загрузчиком классов и его предками.
Since:
1.2
See Also:
  • getDefinedPackages()

findLibrary

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

setDefaultAssertionStatus

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

setPackageAssertionStatus

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

Подпакет пакета с именем 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)
Устанавливает желаемый статус проверки для указанного верхнего уровня класса в этом загрузчике классов и всех вложенных классов, содержащихся в нём. Это значение имеет приоритет перед стандартным статусом проверки загрузчика классов и любым применимым стандартным значением пакета. Этот метод не имеет эффекта, если указанный класс уже был инициализирован. (После инициализации класса его статус проверки изменить нельзя.)

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

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

clearAssertionStatus

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

© 1993, 2023, 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://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/ClassLoader.html

Spec-Zone.ru

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