Spec-Zone.ru › OpenJDK 27

Класс 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
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли какой-либо другой объект этому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии.
Финализация устарела и может быть удалена в одном из следующих выпусков.
final Class<?> getClass()
Возвращает класс среды выполнения для этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного промежутка реального времени.

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

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:
Для обеспечения совместимости этот метод не является окончательным. Если метод переопределен, он должен возвращать то же имя, которое было указано при создании этого загрузчика классов.
Возвращает:
имя этого загрузчика классов; или null, если имя этому загрузчику классов не задано.
Начиная с версии:
9

loadClass

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

loadClass

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

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

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

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

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

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

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

getClassLoadingLock

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

findClass

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

findClass

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

defineClass

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

defineClass

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

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

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

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

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

defineClass

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

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

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

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

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

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

defineClass

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

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

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

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

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

resolveClass

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

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 в именованном модуле могут, например, быть запечатаны с разной базой запечатывания.

Параметры:
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()
Возвращает все Packages, определённые этим загрузчиком классов. В возвращаемом массиве нет повторяющихся Packages с одинаковым именем.
Примечание 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()
Возвращает все Packages, определённые этим загрузчиком классов и его предками. Возвращаемый массив может содержать несколько объектов 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)RESTRICTED
  • 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, 2026, 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.

Spec-Zone.ru

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