Spec-Zone.ru › OpenJDK 25

Класс ClassLoader

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

Каждый объект Class содержит reference к ClassLoader, которым он был определён.

Объекты Class для классов массивов не создаются загрузчиками классов, а создаются автоматически по мере необходимости средой выполнения 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)
Устанавливает подписывающие стороны класса.

Методы, объявленные в классе 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 — если заданное имя пусто.
С версии:
9

ClassLoader

protected ClassLoader(ClassLoader parent)
Создает новый загрузчик классов с указанным родительским загрузчиком классов для делегирования.
Примечание API:
Если в качестве родительского загрузчика указан null (для загрузчика классов начальной загрузки), нет гарантии, что будут видны все классы платформы.
Параметры:
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 имеет значение 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)

findSystemClass

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

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

Параметры:
name — двоичное имя класса
Возвращает:
объект Class для указанного name
Исключения:
ClassNotFoundException — если класс не найден
См. также:
  • ClassLoader(ClassLoader)
  • getParent()

findLoadedClass

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

setSigners

protected final void setSigners(Class<?> c, Object[] signers)
Задает подписантов класса. Этот метод следует вызывать после определения класса.
Параметры:
c — объект Class
signers — подписанты класса
С версии:
1.1

findResource

protected URL findResource(String moduleName, String name) throws IOException
Возвращает URL ресурса в модуле, определенном для этого загрузчика классов. Реализациям загрузчиков классов, поддерживающим загрузку из модулей, следует переопределять этот метод.
Примечание API:
Этот метод лежит в основе методов Class.getResource, Class.getResourceAsStream и Module.getResourceAsStream. На него не распространяются правила инкапсуляции, заданные Module.getResourceAsStream.
Требования к реализации:
Реализация по умолчанию пытается найти ресурс, вызывая findResource(String), если moduleName имеет значение null. В противном случае она возвращает null.
Параметры:
moduleName — имя модуля; или null, чтобы найти ресурс в безымянном модуле этого загрузчика классов
name — имя ресурса
Возвращает:
URL ресурса; null, если ресурс не найден, для его поиска не удалось сформировать URL или загрузчику классов не определен модуль с указанным именем.
Исключения:
IOException — при возникновении ошибок ввода-вывода
С версии:
9
См. также:
  • ModuleReader.find(String)

getResource

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

Имя ресурса представляет собой путь, компоненты которого разделены символом «/» и который идентифицирует ресурс.

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

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

getResources

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

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

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

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

resources

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

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

Поиск ресурсов выполняется при обработке возвращённого потока. Если обработка приводит к возникновению IOException, исключение ввода-вывода оборачивается в UncheckedIOException, которое затем выбрасывается.

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

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

findResource

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

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

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

findResources

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. В таких реализациях этот метод вернёт null, если родительским загрузчиком данного загрузчика классов является загрузчик начальной загрузки.
Возвращает:
Родительский ClassLoader
Начиная с версии:
1.2

getUnnamedModule

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

getPlatformClassLoader

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

getSystemClassLoader

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

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

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

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

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

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

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

Возвращает:
Системный ClassLoader
Исключения:
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-файла как запечатанный, в качестве sealBase обычно используется URL JAR-файла. Если классы пакета 'p', определённого этим загрузчиком классов, загружаются из нескольких JAR-файлов, объект Package может содержать разные сведения в зависимости от того, какой класс пакета 'p' был определён первым и манифест какого JAR-файла был первым прочитан для явного определения пакета 'p'.

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

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

getDefinedPackage

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

getDefinedPackages

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

getPackage

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

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

Примечание API:
platform class loader может делегировать загрузку загрузчику классов приложения, однако загрузчик классов приложения не является его предком. При вызове для загрузчика классов платформы этот метод не найдёт пакеты, определённые загрузчику классов приложения.
Параметры:
name — имя пакета
Возвращает:
Package с заданным именем, определённый этим загрузчиком классов или одним из его предков, либо null, если он не найден.
Исключения:
NullPointerException — если name имеет значение null.
Начиная с версии:
1.2
См. также:
  • getDefinedPackage(String)

getPackages

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

findLibrary

protected String findLibrary(String libname)
Возвращает абсолютное имя пути к нативной библиотеке. ВМ вызывает этот метод, чтобы найти нативные библиотеки, принадлежащие классам, загруженным этим загрузчиком классов. Если этот метод возвращает null, ВМ ищет библиотеку по пути, указанному в свойстве "java.library.path".
Параметры:
libname — имя библиотеки
Возвращает:
Абсолютный путь к нативной библиотеке
С версии:
1.2
См. также:
  • System.loadLibrary(String)ОГРАНИЧЕННЫЙ
  • System.mapLibraryName(String)

setDefaultAssertionStatus

public void setDefaultAssertionStatus(boolean enabled)
Устанавливает статус утверждений по умолчанию для этого загрузчика классов. Эта настройка определяет, будут ли утверждения по умолчанию включены или отключены для классов, загружаемых этим загрузчиком классов и инициализируемых в будущем. Эту настройку можно переопределить для отдельного пакета или класса, вызвав setPackageAssertionStatus(String, boolean) или setClassAssertionStatus(String, boolean).
Параметры:
enabled — true, если для классов, загружаемых этим загрузчиком классов, впредь должны быть включены утверждения по умолчанию, false, если для них должны быть отключены утверждения по умолчанию.
С версии:
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).

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

setClassAssertionStatus

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

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

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

clearAssertionStatus

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

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

Spec-Zone.ru

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