Класс 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-среда выполнения имеет следующие встроенные загрузчики классов:Загрузчик Bootstrap. Это встроенный загрузчик классов виртуальной машины, обычно представленный как
null, и не имеет родителя.-
Загрузчик платформенных классов. Все платформенные классы видны загрузчику платформенных классов, который может использоваться в качестве родителя экземпляра
ClassLoader. Платформенные классы включают API платформы Java SE, их классы реализации и специфичные для JDK классы среды выполнения, определённые загрузчиком платформенных классов или его предками.Для возможности обновления/переопределения модулей, определённых загрузчиком платформенных классов, и когда обновлённые модули считывают модули, определённые загрузчиками классов, отличными от загрузчика платформенных классов и его предков, загрузчик платформенных классов может быть вынужден делегировать другим загрузчикам классов, например, загрузчику прикладных классов. Другими словами, классы в именованных модулях, определённых загрузчиками классов, отличными от загрузчика платформенных классов и его предков, могут быть видны загрузчику платформенных классов.
Загрузчик системных классов. Также известен как загрузчик прикладных классов и отличается от загрузчика платформенных классов. Загрузчик системных классов обычно используется для определения классов в пути приложения, пути модуля и специфичных для 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™.
- С:
- 1.0
- См. также:
resolveClass(Class)
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | ClassLoader() | Создаёт новый загрузчик классов, используя |
protected | ClassLoader(ClassLoader parent) | Создаёт новый загрузчик классов, используя указанный родительский загрузчик классов для делегирования. |
protected | ClassLoader(String name,
ClassLoader parent) | Создаёт новый загрузчик классов с заданным именем и указанным родительским загрузчиком классов для делегирования. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
void | clearAssertionStatus() | Устанавливает значение по умолчанию для состояния проверки утверждений для этого загрузчика классов в |
protected Class<?> | defineClass(byte[] b,
int off,
int len) | Устарело. Заменено на defineClass(String, byte[], int, int)
|
protected Class<?> | defineClass(String name,
byte[] b,
int off,
int len) | Преобразует массив байтов в экземпляр класса |
protected Class<?> | defineClass(String name,
byte[] b,
int off,
int len,
ProtectionDomain protectionDomain) | Преобразует массив байтов в экземпляр класса |
protected Class<?> | defineClass(String name,
ByteBuffer b,
ProtectionDomain protectionDomain) | Преобразует |
protected Package | definePackage(String name,
String specTitle,
String specVersion,
String specVendor,
String implTitle,
String implVersion,
String implVendor,
URL sealBase) | Определяет пакет по имени в этом |
protected Class<?> | findClass(String name) | Находит класс с указанным бинарным именем. |
protected Class<?> | findClass(String moduleName,
String name) | Находит класс с заданным бинарным именем в модуле, определённом для этого загрузчика классов. |
protected String | findLibrary(String libname) | Возвращает абсолютный путь к файлу нативной библиотеки. |
protected Class<?> | findLoadedClass(String name) | Возвращает класс с заданным бинарным именем, если этот загрузчик был зарегистрирован виртуальной машиной Java как инициатор загрузки класса с таким бинарным именем. |
protected URL | findResource(String name) | Находит ресурс с заданным именем. |
protected URL | findResource(String moduleName,
String name) | Возвращает URL к ресурсу в модуле, определённом для этого загрузчика классов. |
protected Enumeration<URL> | findResources(String name) | Возвращает перечисление |
protected Class<?> | findSystemClass(String name) | Находит класс с указанным бинарным именем, загружая его при необходимости. |
protected Object | getClassLoadingLock(String className) | Возвращает объект блокировки для операций загрузки классов. |
Package | getDefinedPackage(String name) | Возвращает |
Package[] | getDefinedPackages() | Возвращает все |
String | getName() | Возвращает имя этого загрузчика классов или |
protected Package | getPackage(String name) | Устарело. Если несколько загрузчиков классов делегируют друг другу и определяют классы с одинаковым именем пакета, и один из таких загрузчиков полагается на поведение поиска getPackage для возврата Package из родительского загрузчика, тогда свойства, экспонируемые Package, могут быть не такими, как ожидается в остальной части программы. |
protected Package[] | getPackages() | Возвращает все |
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) | Находит все ресурсы с заданным именем из пути поиска, используемого для загрузки классов. |
Module | getUnnamedModule() | Возвращает безымянный |
boolean | isRegisteredAsParallelCapable() | Возвращает |
Class<?> | loadClass(String name) | Загружает класс с заданным бинарным именем. |
protected Class<?> | loadClass(String name,
boolean resolve) | Загружает класс с указанным бинарным именем. |
protected static boolean | registerAsParallelCapable() | Регистрирует вызывающую сторону как параллельную. |
protected 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 void | setSigners(Class<?> c,
Object[] signers) | Устанавливает подписывающих лиц класса. |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
ClassLoader
protected ClassLoader(String name,
ClassLoader parent) Создаёт новый загрузчик классов с указанным именем и использующим указанный родительский загрузчик классов для делегирования.
- Примечание API:
- Если родительский загрузчик задан как
null(для загрузчика базовых классов), то нет гарантии, что все платформенные классы будут видны. - Параметры:
-
name- имя загрузчика классов; илиnullесли не задано имя -
parent- родительский загрузчик классов - Исключения:
-
IllegalArgumentException- если заданное имя пустое. -
SecurityException- если менеджер безопасности существует и его методSecurityManager.checkCreateClassLoader()не разрешает создание нового загрузчика классов. - C момента:
- 9
ClassLoader
protected ClassLoader(ClassLoader parent)
Создаёт новый загрузчик классов, используя указанный родительский загрузчик классов для делегирования.
Если существует менеджер безопасности, вызывается его метод checkCreateClassLoader. Это может привести к исключению безопасности.
- Примечание API:
- Если родительский загрузчик задан как
null(для загрузчика базовых классов), то нет гарантии, что все платформенные классы будут видны. - Параметры:
-
parent- Родительский загрузчик классов - Исключения:
-
SecurityException- Если менеджер безопасности существует и его методcheckCreateClassLoaderне разрешает создание нового загрузчика классов. - C момента:
- 1.2
ClassLoader
protected ClassLoader()
Создаёт новый загрузчик классов, используя ClassLoader возвращаемый методом getSystemClassLoader() в качестве родительского загрузчика классов.
Если существует менеджер безопасности, вызывается его метод checkCreateClassLoader. Это может привести к исключению безопасности.
- Исключения:
-
SecurityException- Если менеджер безопасности существует и его методcheckCreateClassLoaderне разрешает создание нового загрузчика классов.
Методы
getName
public String getName()
Возвращает имя этого загрузчика классов или null если у этого загрузчика классов нет имени.
- Примечание API:
- Этот метод не является final для совместимости. Если этот метод переопределён, этот метод должен возвращать то же самое имя, что и при создании этого загрузчика классов.
- Возвращает:
- имя этого загрузчика классов; или
nullесли у этого загрузчика классов нет имени. - С:
- 9
loadClass
public Class<?> loadClass(String name)
throws ClassNotFoundException Загружает класс с указанным бинарным именем. Этот метод ищет классы так же, как и метод loadClass(String, boolean). Он вызывается виртуальной машиной Java для разрешения ссылок на классы. Вызов этого метода эквивалентен вызову loadClass(name,
false).
- Параметры:
-
name- Бинарное имя класса - Возвращает:
- Полученный
Classобъект - Изначает:
-
ClassNotFoundException- Если класс не был найден
loadClass
protected Class<?> loadClass(String name,
boolean resolve)
throws ClassNotFoundException Загружает класс с указанным бинарным именем. По умолчанию этот метод ищет классы в следующем порядке:
Вызов
findLoadedClass(String)для проверки, был ли класс уже загружен.Вызов метода
loadClassу родительского загрузчика классов. Если родительский загрузчикnullиспользуется встроенный в виртуальную машину загрузчик классов.Вызов метода
findClass(String)для поиска класса.
Если класс был найден с помощью вышеуказанных шагов, и флаг resolve равен true, этот метод вызовет метод resolveClass(Class) для полученного Class объекта.
Подклассам ClassLoader рекомендуется переопределять findClass(String), а не этот метод.
Если не переопределён, этот метод синхронизируется на результате метода getClassLoadingLock во время всего процесса загрузки класса.
- Параметры:
-
name- Бинарное имя класса -
resolve- Еслиtrueтогда разрешить класс - Возвращает:
- Полученный
Classобъект - Изначает:
-
ClassNotFoundException- Если класс не удалось найти
getClassLoadingLock
protected Object getClassLoadingLock(String className)
Возвращает объект блокировки для операций загрузки класса. Для обеспечения обратной совместимости, реализация этого метода по умолчанию выполняется следующим образом. Если этот объект ClassLoader зарегистрирован как способный к параллельной обработке, метод возвращает выделенный объект, связанный с указанным именем класса. В противном случае метод возвращает этот объект ClassLoader.
- Параметры:
-
className- Имя загружаемого класса - Возвращает:
- блокировка для операций загрузки класса
- Изначает:
-
NullPointerException- Если зарегистрирован как способный к параллельной обработке иclassNameравно null - С:
- 1.7
- См. также:
loadClass(String, boolean)
findClass
protected Class<?> findClass(String name)
throws ClassNotFoundException Ищет класс с указанным бинарным именем. Этот метод должен быть переопределен реализациями загрузчика классов, которые следуют модели делегирования для загрузки классов, и будет вызван методом loadClass после проверки родительского загрузчика классов на наличие запрашиваемого класса.
- Требования к реализации:
- Реализация по умолчанию генерирует
ClassNotFoundException. - Параметры:
-
name- Бинарное имя класса - Возвращает:
- Полученный
Classобъект - Изначает:
-
ClassNotFoundException- Если класс не был найден - С:
- 1.2
findClass
protected Class<?> findClass(String moduleName,
String name) Ищет класс с заданным бинарным именем в модуле, определённом для этого загрузчика классов. Реализации загрузчиков классов, которые поддерживают загрузку из модулей, должны переопределять этот метод.
- Примечание API:
- Этот метод возвращает
nullвместо генерацииClassNotFoundExceptionесли класс не был найден. - Требования к реализации:
- Реализация по умолчанию пытается найти класс, вызвав
findClass(String), когдаmoduleNameравноnull. В противном случае возвращаетnull. - Параметры:
-
moduleName- Имя модуля; илиnullчтобы найти класс в безымянном модуле для этого загрузчика классов -
name- Бинарное имя класса - Возвращает:
- Полученный
Classобъект, илиnullесли класс не был найден. - С:
- 9
defineClass
@Deprecated(since="1.1")
protected final Class<?> defineClass(byte[] b,
int off,
int len)
throws ClassFormatError defineClass(String, byte[], int, int)
Преобразует массив байтов в экземпляр класса Class. Перед использованием Class он должен быть разрешен. Этот метод устарел в пользу версии, принимающей бинарное имя в качестве первого аргумента, и более безопасен.
- Параметры:
-
b- Байты, составляющие данные класса. Байты в позицияхoffпоoff+len-1должны иметь формат допустимого файла класса, определённый в Спецификации виртуальной машины Java™. -
off- Начальный смещение вbданных класса -
len- Длина данных класса - Возвращает:
- Объект
Classкласса, созданный из указанных данных класса - Изначает:
-
ClassFormatError- Если данные не содержали допустимого класса -
IndexOutOfBoundsException- Еслиoffилиlenотрицательные илиoff+lenбольшеb.length. -
SecurityException- Если попытка добавить этот класс в пакет, содержащий классы, подписанные другим набором сертификатов, чем этот класс, или если попытка определить класс в пакете с полным именем, начинающимся с "java.". - См. также:
-
loadClass(String, boolean),resolveClass(Class)
defineClass
protected final Class<?> defineClass(String name,
byte[] b,
int off,
int len)
throws ClassFormatError Преобразует массив байтов в экземпляр класса Class. Перед использованием Class он должен быть разрешён.
Этот метод присваивает по умолчанию ProtectionDomain вновь определённому классу. Этот классу ProtectionDomain фактически предоставляется тот же набор разрешений, что и возвращаемый при вызове Policy.getPolicy().getPermissions(new CodeSource(null, null)). По умолчанию область защиты создаётся при первом вызове defineClass и повторно используется при последующих вызовах.
Для назначения определённой области защиты классу используйте метод defineClass, который принимает область защиты в качестве одного из аргументов.
Этот метод определяет пакет в этом загрузчике классов, соответствующий пакету 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()
Регистрирует вызывающий метод как способный к параллельной обработке (параллелеспособный). Регистрация выполняется только при соблюдении всех следующих условий:
- ни один экземпляр вызывающего метода не был создан
- все классы-предки (кроме класса Object) вызывающего метода зарегистрированы как способные к параллельной обработке
Обратите внимание, что после регистрации загрузчика классов как способного к параллельной обработке, изменить это невозможно.
- Возвращает:
-
trueесли вызывающий метод успешно зарегистрирован как способный к параллельной обработке, иfalseв противном случае. - С:
- 1.7
- См. также:
isRegisteredAsParallelCapable()
isRegisteredAsParallelCapable
public final boolean isRegisteredAsParallelCapable()
Возвращает true , если этот загрузчик классов зарегистрирован как параллелеспособный, в противном случае false.
- Возвращает:
-
trueесли этот загрузчик классов является параллелеспособным, иначеfalse. - С:
- 9
- См. также:
registerAsParallelCapable()
getSystemResource
public static URL getSystemResource(String name)
Найдите ресурс с указанным именем из пути поиска, используемого для загрузки классов. Этот метод находит ресурс через системный загрузчик классов (см. getSystemClassLoader()).
Ресурсы в именованных модулях подчиняются правилам инкапсуляции, указанным в Module.getResourceAsStream. Кроме того, за исключением специального случая, когда ресурс имеет имя, оканчивающееся на ".class", этот метод будет находить ресурсы только в пакетах именованных модулей, когда пакет opened безусловно.
- Параметры:
-
name- Имя ресурса - Возвращает:
- Объект
URLк ресурсу;nullесли ресурс не найден, URL не может быть построен для поиска ресурса, ресурс находится в пакете, который не открыт безусловно, или доступ к ресурсу запрещен менеджером безопасности. - С:
- 1.1
getSystemResources
public static Enumeration<URL> getSystemResources(String name)
throws IOException Находит все ресурсы с указанным именем из пути поиска, используемого для загрузки классов. Таким образом найденные ресурсы возвращаются как Enumeration объектов URL.
Порядок поиска описан в документации к getSystemResource(String).
Ресурсы в именованных модулях подчиняются правилам инкапсуляции, указанным в Module.getResourceAsStream. Кроме того, за исключением специального случая, когда ресурс имеет имя, оканчивающееся на ".class", этот метод будет находить ресурсы только в пакетах именованных модулей, когда пакет opened безусловно.
- Параметры:
-
name- Имя ресурса - Возвращает:
- Перечисление объектов
URLдля ресурса. Если ресурсы не найдены, перечисление будет пустым. Ресурсы, для которыхURLне может быть построен, находятся в пакете, который не открыт безусловно, или доступ к ресурсу запрещен менеджером безопасности, не возвращаются в перечислении. - Исключения:
-
IOException- Если возникают ошибки ввода-вывода - С:
- 1.2
getResourceAsStream
public InputStream getResourceAsStream(String name)
Возвращает поток ввода для чтения указанного ресурса.
Порядок поиска описан в документации к getResource(String).
Ресурсы в именованных модулях подчиняются правилам инкапсуляции, указанным в Module.getResourceAsStream. Кроме того, за исключением специального случая, когда ресурс имеет имя, оканчивающееся на ".class", этот метод будет находить ресурсы только в пакетах именованных модулей, когда пакет opened безусловно.
- Параметры:
-
name- Имя ресурса - Возвращает:
- Поток ввода для чтения ресурса;
nullесли ресурс не найден, ресурс находится в пакете, который не открыт безусловно, или доступ к ресурсу запрещен менеджером безопасности. - Исключения:
-
NullPointerException- Еслиnameявляетсяnull - С:
- 1.1
getSystemResourceAsStream
public static InputStream getSystemResourceAsStream(String name)
Открыть для чтения ресурс с указанным именем из пути поиска, используемого для загрузки классов. Этот метод находит ресурс через системный загрузчик классов (см. getSystemClassLoader()).
Ресурсы в именованных модулях подчиняются правилам инкапсуляции, указанным в Module.getResourceAsStream. Кроме того, за исключением специального случая, когда ресурс имеет имя, оканчивающееся на ".class", этот метод будет находить ресурсы только в пакетах именованных модулей, когда пакет opened безусловно.
- Параметры:
-
name- Имя ресурса - Возвращает:
- Поток ввода для чтения ресурса;
nullесли ресурс не найден, ресурс находится в пакете, который не открыт безусловно, или доступ к ресурсу запрещен менеджером безопасности. - С:
- 1.1
getParent
public final ClassLoader getParent()
Возвращает родительский загрузчик классов для делегирования. Некоторые реализации могут использовать null для представления загрузчика Bootstrap. Этот метод вернет null в таких реализациях, если родительским загрузчиком этого загрузчика является загрузчик Bootstrap.
- Возвращает:
- Родительский загрузчик
ClassLoader - Исключения:
-
SecurityException- Если присутствует менеджер безопасности, и загрузчик классов вызывающего неnullи не является предком этого загрузчика, и вызывающий не имеет разрешенияRuntimePermission("getClassLoader") - С:
- 1.2
getUnnamedModule
public final Module getUnnamedModule()
Возвращает безымянный Module для этого загрузчика классов.
- Возвращает:
- Безымянный модуль для этого загрузчика классов
- С:
- 9
- См. также:
Module.isNamed()
getPlatformClassLoader
public static ClassLoader getPlatformClassLoader()
Возвращает загрузчик платформенных классов. Все платформенные классы видны загрузчику платформенных классов.
- Примечание реализации:
- Имя встроенного платформенного загрузчика классов
"platform". - Возвращает:
- Платформенный загрузчик
ClassLoader. - Исключения:
-
SecurityException- Если присутствует менеджер безопасности, и загрузчик классов вызывающего неnull, и загрузчик классов вызывающего не тот же самый или не является предком платформенного загрузчика классов, и вызывающий не имеет разрешенияRuntimePermission("getClassLoader") - С:
- 9
getSystemClassLoader
public static ClassLoader getSystemClassLoader()
Возвращает системный загрузчик классов. Это родитель по умолчанию для делегирования новых ClassLoader экземпляров и обычно загрузчик классов, используемый для запуска приложения.
Этот метод вызывается в самом начале процесса запуска runtime, в этот момент он создает системный загрузчик классов. Этот загрузчик будет контекстным загрузчиком для главного потока приложения (например, поток, который вызывает метод main главного класса).
Системный загрузчик классов по умолчанию — это реализуемый экземпляр данного класса.
Если системная переменная "java.system.class.loader" определена, когда этот метод вызывается впервые, то значение этой переменной принимается как имя класса, который будет возвращен в качестве системного загрузчика классов. Класс загружается с помощью системного загрузчика по умолчанию и должен определять публичный конструктор, который принимает один параметр типа ClassLoader, который используется как родитель по делегированию. Затем экземпляр создаётся с помощью этого конструктора с системным загрузчиком по умолчанию в качестве параметра. Полученный загрузчик классов определяется как системный загрузчик классов. Во время создания, загрузчик классов должен быть очень осторожен, чтобы не вызывать getSystemClassLoader(). Если обнаружена циклическая инициализация системного загрузчика классов, то выбрасывается IllegalStateException.
- Примечание реализации:
- Системная переменная для переопределения системного загрузчика классов не проверяется до тех пор, пока VM не будет практически полностью инициализирован. Код, который выполняет этот метод во время запуска, должен быть осторожен, чтобы не кэшировать возвращаемое значение до тех пор, пока система не будет полностью инициализирована.
Имя встроенного системного загрузчика классов
"app". Системная переменная "java.class.path" считывается во время ранней инициализации VM, чтобы определить путь к классам. Пустое значение переменной "java.class.path" интерпретируется по-разному в зависимости от того, является ли начальный модуль (модуль, содержащий главный класс) именованным или безымянным: если именованным, встроенный системный загрузчик классов не будет иметь пути к классам и будет искать классы и ресурсы, используя путь к модулю приложения; в противном случае, если безымянный, он установит путь к классам в текущую рабочую директорию. - Возвращает:
- Системный загрузчик
ClassLoader - Исключения:
-
SecurityException- Если присутствует менеджер безопасности, и загрузчик классов вызывающего неnullи не тот же самый или не является предком системного загрузчика классов, и вызывающий не имеет разрешенияRuntimePermission("getClassLoader") -
IllegalStateException- Если вызывается рекурсивно во время создания загрузчика классов, указанного в системной переменной "java.system.class.loader". -
Error- Если системная переменная "java.system.class.loader" определена, но указанный класс не может быть загружен, класс-поставщик не определяет требуемый конструктор или в этом конструкторе при его вызове возникает исключение. Основная причина ошибки может быть получена через методThrowable.getCause().
definePackage
protected Package definePackage(String name,
String specTitle,
String specVersion,
String specVendor,
String implTitle,
String implVersion,
String implVendor,
URL sealBase) Определяет пакет по имени в этом ClassLoader.
Имена пакетов должны быть уникальными для загрузчика классов и не могут быть переопределены или изменены после создания.
Если загрузчик классов хочет определить пакет с определенными свойствами, такими как информация о версии, то загрузчик классов должен вызвать этот метод definePackage перед вызовом defineClass. В противном случае метод defineClass определит пакет в этом загрузчике классов, соответствующий пакету только что определенного класса; свойства этого определенного пакета указаны в Package.
- Примечание API:
- Загрузчик классов, который хочет определить пакет для классов в JAR-файле, обычно использует заголовки, версии и поставщиков спецификации и реализации из манифеста JAR. Если пакет указан как запечатанный в манифесте JAR, то
URLJAR-файла обычно используется в качествеsealBase. Если классы пакета'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уже определен этим загрузчиком классов - С тех пор:
- 1.2
- См. также:
- Спецификация JAR-файлов: Запечатывание пакетов
getDefinedPackage
public final Package getDefinedPackage(String name)
Возвращает пакет Package с заданным именем, определённый этим загрузчиком классов.
- Параметры:
-
name- Имя пакета - Возвращает:
- Пакет
Packageс заданным именем, определенный этим загрузчиком классов, илиnullесли не найден - Исключение:
-
NullPointerException- еслиnameявляетсяnull. - С тех пор:
- 9
getDefinedPackages
public final Package[] getDefinedPackages()
Возвращает все Package , определённые этим загрузчиком классов. Возвращаемый массив не содержит дублированных Package с одинаковым именем.
- Примечание API:
- Этот метод возвращает массив, а не
SetилиStream, для согласованности с существующим методомgetPackages(). - Возвращает:
- Массив объектов
Package, определённых этим загрузчиком классов; или массив нулевой длины, если пакет не был определён этим загрузчиком классов. - С тех пор:
- 9
getPackage
@Deprecated(since="9") protected Package getPackage(String name)
getPackage для возвращения пакета Package из родительского загрузчика, то свойства, доступные через Package, могут не соответствовать ожиданиям в остальной части программы. Например, Package будет отображать только аннотации из файла package-info.class , определенного родительским загрузчиком, даже если аннотации существуют в файле package-info.class , определенном дочерним загрузчиком. Более надёжный подход заключается в использовании метода getDefinedPackage(java.lang.String), который возвращает пакет Package для указанного загрузчика классов.Находит пакет по имени в этом загрузчике классов и его предках.
Если этот загрузчик классов определяет Package с данным именем, то возвращается Package. В противном случае ищутся предки этого загрузчика классов рекурсивно (родитель за родителем) для поиска Package с данным именем.
- Примечание API:
- Загрузчик платформы
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)
Возвращает абсолютный путь к нативной библиотеке. Виртуальная машина (VM) вызывает этот метод для поиска нативных библиотек, принадлежащих классам, загруженным с помощью этого загрузчика классов. Если этот метод возвращает null, VM ищет библиотеку по пути, указанному как свойство "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
© 1993, 2020, 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/11/docs/api/java.base/java/lang/ClassLoader.html