Класс ClassLoader
- java.lang.Object
-
- java.lang.ClassLoader
- Прямые известные подклассы:
- SecureClassLoader
public abstract class ClassLoader extends Object
Класс загрузчик классов — это объект, ответственный за загрузку классов. Класс ClassLoader — абстрактный класс. Учитывая бинарное имя класса, загрузчик классов должен попытаться найти или сгенерировать данные, составляющие определение класса. Типичная стратегия заключается в преобразовании имени в имя файла и затем чтении «файла класса» с таким именем из файловой системы.
Каждый объект содержит ссылку на Classreference на загрузчик, который его определил.
Объекты для классов массивов не создаются загрузчиками классов, а создаются автоматически по мере необходимости Java-средой выполнения. Загрузчик класса массива, возвращаемый методом Class.getClassLoader(), такой же, как и загрузчик класса его элемента; если тип элемента — примитивный тип, то массив класса не имеет загрузчика.
Приложения реализуют подклассы ClassLoader для расширения способа динамической загрузки классов Java-виртуальной машиной.
Загрузчики классов могут использоваться менеджерами безопасности для указания областей безопасности.
Класс ClassLoader использует модель делегирования для поиска классов и ресурсов. Каждый экземпляр ClassLoader имеет связанный родительский загрузчик классов. При запросе поиска класса или ресурса экземпляр ClassLoader делегирует поиск родительскому загрузчику классов, прежде чем попытаться найти класс или ресурс самостоятельно. Встроенный загрузчик классов виртуальной машины, называемый «bootstrap class loader», сам по себе не имеет родителя, но может служить родителем экземпляра ClassLoader.
Загрузчики классов, поддерживающие одновременную загрузку классов, известны как параллельно-способные загрузчики классов и обязаны зарегистрировать себя во время инициализации класса, вызвав метод . Обратите внимание, что класс ClassLoader.registerAsParallelCapableClassLoader по умолчанию зарегистрирован как параллельно-способный. Однако его подклассы по-прежнему должны зарегистрировать себя, если они параллельно-способные.
В средах, в которых модель делегирования не является строго иерархической, загрузчики классов должны быть параллельно-способными, в противном случае загрузка классов может привести к тупиковым ситуациям, потому что блокировка загрузчика удерживается на все время процесса загрузки класса (см. методы ). loadClass
Обычно Java-виртуальная машина загружает классы из локальной файловой системы зависимым от платформы способом. Например, в системах UNIX виртуальная машина загружает классы из каталога, определённого переменной среды CLASSPATH.
Однако некоторые классы могут не происходить из файла; они могут происходить из других источников, таких как сеть, или они могут быть созданы приложением. Метод преобразует массив байтов в экземпляр класса defineClassClass. Экземпляры этого вновь определённого класса можно создать с помощью . Class.newInstance
Методы и конструкторы объектов, созданных загрузчиком классов, могут ссылаться на другие классы. Для определения ссылаемых классов Java-виртуальная машина вызывает метод загрузчика классов, который первоначально создал класс. loadClass
Например, приложение может создать сетевой загрузчик классов для загрузки файлов классов с сервера. Пример кода может выглядеть следующим образом:
ClassLoader loader = new NetworkClassLoader(host, port);
Object main = loader.loadClass("Main", true).newInstance();
. . . Подкласс сетевого загрузчика классов должен определить методы и findClassloadClassData для загрузки класса из сети. После загрузки байтов, составляющих класс, он должен использовать метод для создания экземпляра класса. Пример реализации: 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"
- С момента:
- 1.0
- См. также:
resolveClass(Class)
Конструкторы
| Модификатор | Конструктор и описание |
|---|---|
protected |
ClassLoader() Создаёт новый загрузчик классов, используя |
protected |
ClassLoader(ClassLoader parent) Создаёт новый загрузчик классов, используя указанный родительский загрузчик классов для делегирования. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
void |
clearAssertionStatus() Устанавливает состояние проверки по умолчанию для этого загрузчика классов в |
protected Class<?> |
defineClass(byte[] b,
int off,
int len) Устарело. Заменено на |
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 String |
findLibrary(String libname) Возвращает абсолютный путь к нативному библиотеке. |
protected Class<?> |
findLoadedClass(String name) Возвращает класс с заданным бинарным именем, если этот загрузчик был зарегистрирован Java-виртуальной машиной как инициирующий загрузчик класса с таким бинарным именем. |
protected URL |
findResource(String name) Находит ресурс с данным именем. |
protected Enumeration<URL> |
findResources(String name) Возвращает перечисление объектов |
protected Class<?> |
findSystemClass(String name) Находит класс с указанным бинарным именем, загружая его при необходимости. |
protected Object |
getClassLoadingLock(String className) Возвращает объект блокировки для операций загрузки класса. |
protected Package |
getPackage(String name) Возвращает |
protected Package[] |
getPackages() Возвращает все |
ClassLoader |
getParent() Возвращает родительский загрузчик классов для делегирования. |
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) Находит все ресурсы с заданным именем из пути поиска, используемого для загрузки классов. |
Class<?> |
loadClass(String name) Загружает класс с указанным бинарным именем. |
protected Class<?> |
loadClass(String name,
boolean resolve) Загружает класс с указанным бинарным именем. |
protected static boolean |
registerAsParallelCapable() Регистрирует вызывающего абонента как способного к параллельной работе. |
protected void |
resolveClass(Class<?> c) Связывает указанный класс. |
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(ClassLoader parent)
Создает новый загрузчик классов, используя указанный родительский загрузчик классов для делегирования.
Если существует менеджер безопасности, вызывается его метод . Это может привести к исключению безопасности.checkCreateClassLoader
- Параметры:
-
parent- Родительский загрузчик классов - Исключения:
-
SecurityException- Если менеджер безопасности существует и его методcheckCreateClassLoaderне разрешает создание нового загрузчика классов. - С:
- 1.2
ClassLoader
protected ClassLoader()
Создает новый загрузчик классов, используя ClassLoader возвращаемый методом в качестве родительского загрузчика классов.getSystemClassLoader()
Если существует менеджер безопасности, вызывается его метод . Это может привести к исключению безопасности.checkCreateClassLoader
- Исключения:
-
SecurityException- Если менеджер безопасности существует и его методcheckCreateClassLoaderне разрешает создание нового загрузчика классов.
Методы
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Вызывает метод
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 Ищет класс с указанным бинарным именем. Этот метод должен быть переопределён реализациями загрузчика классов, которые следуют модели делегирования для загрузки классов, и будет вызван методом после проверки родительского загрузчика классов на наличие запрашиваемого класса. Базовая реализация выбрасывает loadClassClassNotFoundException.
- Параметры:
-
name- Бинарное имя класса - Возвращает:
- Возвращаемый объект
Class - Исключения:
-
ClassNotFoundException- Если класс не был найден - С:
- 1.2
defineClass
@Deprecated
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 он должен быть разрешен.
Этот метод назначает стандартную новому определённому классу. ProtectionDomainProtectionDomain фактически предоставляется тот же набор разрешений, возвращаемый при вызове . Стандартная область создаётся при первом вызове Policy.getPolicy().getPermissions(new CodeSource(null, null)) и повторно используется в последующих вызовах.defineClass
Для назначения конкретной ProtectionDomain классу используйте метод , принимающий defineClassProtectionDomain в качестве одного из аргументов.
- Параметры:
-
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. Если область действия — null, то для класса будет назначена область действия по умолчанию, как указано в документации для defineClass(String, byte[],
int, int). Перед использованием класса он должен быть разрешен.
Первый класс, определённый в пакете, определяет точный набор сертификатов, которые должны содержать все последующие классы, определённые в этом пакете. Набор сертификатов для класса извлекается из внутри CodeSourceProtectionDomain класса. Любые классы, добавленные в этот пакет, должны содержать тот же набор сертификатов, иначе будет брошено исключение SecurityException. Обратите внимание, что если name равно null, эта проверка не выполняется. Вы всегда должны передавать бинарное имя класса, который вы определяете, а также байты. Это гарантирует, что класс, который вы определяете, — это действительно тот класс, который вы ожидаете.
Указанное name не может начинаться с "java.", так как все классы в пакетах "java.*" могут быть определены только загрузчиком Bootstrap-классов. Если name не равно null, оно должно быть равно бинарному имени класса, заданному массивом байтов "b", в противном случае будет брошено исключение .NoClassDefFoundError
- Параметры:
-
name- Ожидаемое бинарное имя класса илиnull, если оно неизвестно -
b- Байты, составляющие данные класса. Байты с позицийoffпоoff+len-1должны иметь формат допустимого файла класса, определённого в Спецификации виртуальной машины Java™. -
off- Начальный смещение вbданных класса -
len- Длина данных класса -
protectionDomain- ProtectionDomain класса - Возвращает:
- Объект
Class, созданный из данных, и необязательныйProtectionDomain. - Исключения:
-
ClassFormatError- Если данные не содержали допустимого класса -
NoClassDefFoundError- Еслиnameне равно бинарному имени класса, заданномуb -
IndexOutOfBoundsException- Еслиoffилиlenотрицательные, или еслиoff+lenбольшеb.length. -
SecurityException- Если попытка добавить этот класс в пакет, содержащий классы, подписанные другим набором сертификатов, чем этот класс, или еслиnameначинается с "java.".
defineClass
protected final Class<?> defineClass(String name,
ByteBuffer b,
ProtectionDomain protectionDomain)
throws ClassFormatError Преобразует в экземпляр класса ByteBufferClass, с необязательным 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не равно бинарному имени класса, заданному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
getResource
public URL getResource(String name)
Ищет ресурс с заданным именем. Ресурс — это данные (изображения, аудио, текст и т. д.), к которым код класса может получить доступ независимо от местоположения кода.
Имя ресурса — это путь с разделителями '/', идентифицирующий ресурс.
Этот метод сначала ищет ресурс в родительском загрузчике классов; если родительский загрузчик — null, ищется путь встроенного в виртуальную машину загрузчика классов. В противном случае этот метод вызовет findResource(String) для поиска ресурса.
- Примечание API:
- При переопределении этого метода рекомендуется, чтобы реализация гарантировала, что любая делегация согласуется с методом
getResources(String). - Параметры:
-
name- Имя ресурса - Возвращает:
- Объект
URLдля чтения ресурса илиnull, если ресурс не был найден или у вызывающего нет достаточных привилегий для получения ресурса. - С:
- 1.1
getResources
public Enumeration<URL> getResources(String name)
throws IOException Ищет все ресурсы с заданным именем. Ресурс — это данные (изображения, аудио, текст и т. д.), к которым код класса может получить доступ независимо от местоположения кода.
Имя ресурса — это путь с разделителями /, идентифицирующий ресурс.
Порядок поиска описан в документации для getResource(String).
- Примечание API:
- При переопределении этого метода рекомендуется, чтобы реализация гарантировала, что любая делегация согласуется с методом
getResource(String). Это должно гарантировать, что первый элемент, возвращаемый методомnextElementперечисления, является тем же ресурсом, что и тот, который вернул бы методgetResource(String). - Параметры:
-
name- Имя ресурса - Возвращает:
- Перечисление объектов
для ресурса. Если ресурсы не были найдены, перечисление будет пустым. Ресурсы, к которым загрузчик классов не имеет доступа, не будут присутствовать в перечислении.URL - Исключения:
-
IOException- Если произошли ошибки ввода/вывода - С:
- 1.2
- См. также:
findResources(String)
findResource
protected URL findResource(String name)
Ищет ресурс с заданным именем. Реализации загрузчиков классов должны переопределить этот метод, чтобы указать, где искать ресурсы.
- Параметры:
-
name- Имя ресурса - Возвращает:
- Объект
URLдля чтения ресурса илиnull, если ресурс не найден - С:
- 1.2
findResources
protected Enumeration<URL> findResources(String name)
throws IOException Возвращает перечисление объектов , представляющих все ресурсы с заданным именем. Реализации загрузчиков классов должны переопределять этот метод, чтобы указать, откуда загружать ресурсы.URL
- Параметры:
-
name- Имя ресурса - Возвращает:
- Перечисление объектов
для ресурсовURL - Исключения:
-
IOException- Если произошли ошибки ввода-вывода - С:
- 1.2
registerAsParallelCapable
protected static boolean registerAsParallelCapable()
Регистрирует вызывающий объект как способный к параллельной работе. Регистрация успешна только в том случае, если выполнены все следующие условия:
- не был создан ни один экземпляр вызывающего объекта
- все суперклассы (кроме класса Object) вызывающего объекта зарегистрированы как способные к параллельной работе
Обратите внимание, что после регистрации загрузчика классов как способного к параллельной работе, изменить это значение невозможно.
- Возвращает:
- true, если вызывающий объект успешно зарегистрирован как способный к параллельной работе, и false в противном случае.
- С:
- 1.7
getSystemResource
public static URL getSystemResource(String name)
Находит ресурс с указанным именем из пути поиска, используемого для загрузки классов. Этот метод находит ресурс через системный загрузчик классов (см. getSystemClassLoader()).
- Параметры:
-
name- Имя ресурса - Возвращает:
- Объект
для чтения ресурса илиURLnull, если ресурс не найден - С:
- 1.1
getSystemResources
public static Enumeration<URL> getSystemResources(String name)
throws IOException Находит все ресурсы с указанным именем из пути поиска, используемого для загрузки классов. Найденные ресурсы возвращаются как перечисление объектов Enumeration.URL
Порядок поиска описан в документации для getSystemResource(String).
- Параметры:
-
name- Имя ресурса - Возвращает:
- Перечисление объектов ресурса
URL - Исключения:
-
IOException- Если произошли ошибки ввода-вывода - С:
- 1.2
getResourceAsStream
public InputStream getResourceAsStream(String name)
Возвращает поток ввода для чтения указанного ресурса.
Порядок поиска описан в документации для getResource(String).
- Параметры:
-
name- Имя ресурса - Возвращает:
- Поток ввода для чтения ресурса, или
nullесли ресурс не найден - С:
- 1.1
getSystemResourceAsStream
public static InputStream getSystemResourceAsStream(String name)
Открывает для чтения ресурс с указанным именем из пути поиска, используемого для загрузки классов. Этот метод находит ресурс через системный загрузчик классов (см. getSystemClassLoader()).
- Параметры:
-
name- Имя ресурса - Возвращает:
- Поток ввода для чтения ресурса, или
nullесли ресурс не найден - С:
- 1.1
getParent
public final ClassLoader getParent()
Возвращает родительский загрузчик классов для делегирования. Некоторые реализации могут использовать null для представления загрузчика базовых классов. Этот метод вернет null в таких реализациях, если родительским загрузчиком классов этого загрузчика классов является загрузчик базовых классов.
Если присутствует менеджер безопасности, и загрузчик классов вызывающего объекта не null и не является предком этого загрузчика классов, то этот метод вызывает метод менеджера безопасности с разрешением checkPermission, чтобы проверить разрешение доступа к родительскому загрузчику классов. В противном случае будет брошено исключение RuntimePermission("getClassLoader")SecurityException.
- Возвращает:
- Родительский
ClassLoader - Исключения:
-
SecurityException- Если менеджер безопасности существует и его методcheckPermissionне разрешает доступ к родительскому загрузчику классов этого загрузчика классов. - С:
- 1.2
getSystemClassLoader
public static ClassLoader getSystemClassLoader()
Возвращает системный загрузчик классов для делегирования. Это родительская делегация по умолчанию для новых ClassLoader экземпляров и обычно используется для запуска приложения.
Этот метод вызывается в начале процесса запуска среды выполнения, в этот момент он создает системный загрузчик классов и устанавливает его в качестве контекстного загрузчика классов вызывающего Thread.
Системный загрузчик классов по умолчанию является зависящим от реализации экземпляром этого класса.
Если системная переменная "java.system.class.loader" определена, когда этот метод вызывается в первый раз, то значение этой переменной используется в качестве имени класса, который будет возвращен в качестве системного загрузчика классов. Класс загружается с помощью системного загрузчика классов по умолчанию и должен определять публичный конструктор, принимающий единственный параметр типа ClassLoader, который используется в качестве родительского загрузчика делегирования. Затем экземпляр создается с помощью этого конструктора с системным загрузчиком классов по умолчанию в качестве параметра. Результирующий загрузчик классов определяется как системный загрузчик классов.
Если присутствует менеджер безопасности, и загрузчик классов вызывающего объекта не null и загрузчик классов вызывающего объекта не совпадает и не является предком системного загрузчика классов, то этот метод вызывает метод менеджера безопасности с разрешением checkPermission, чтобы проверить разрешение доступа к системному загрузчику классов. В противном случае будет брошено исключение RuntimePermission("getClassLoader")SecurityException.
- Возвращает:
- Системный
ClassLoaderдля делегирования илиnullесли его нет - Исключения:
-
SecurityException- Если менеджер безопасности существует и его методcheckPermissionне разрешает доступ к системному загрузчику классов. -
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)
throws IllegalArgumentException Определяет пакет по имени в этом ClassLoader. Это позволяет загрузчикам классов определять пакеты для своих классов. Пакеты должны быть созданы до определения класса, имена пакетов должны быть уникальными в пределах загрузчика классов и не могут быть переопределены или изменены после создания.
- Параметры:
-
name- Имя пакета -
specTitle- Заголовок спецификации -
specVersion- Версия спецификации -
specVendor- Поставщик спецификации -
implTitle- Заголовок реализации -
implVersion- Версия реализации -
implVendor- Поставщик реализации -
sealBase- Если неnull, то этот пакет запечатан относительно указанного источника кода. В противном случае пакет не запечатан.URL - Возвращает:
- Новый объект
Package - Исключения:
-
IllegalArgumentException- Если имя пакета дублирует существующий пакет в этом загрузчике классов или в одном из его предков - С:
- 1.2
getPackage
protected Package getPackage(String name)
Возвращает Package, определённый этим загрузчиком классов или любым из его предков.
- Параметры:
-
name- Имя пакета - Возвращает:
Packageсоответствующий данному имени, илиnullесли не найден- С:
- 1.2
getPackages
protected Package[] getPackages()
Возвращает все Packages определённые этим загрузчиком классов и его предками.
- Возвращает:
- Массив объектов
Packageопределённых этимClassLoader - С:
- 1.2
findLibrary
protected String findLibrary(String libname)
Возвращает абсолютный путь к библиотеке нативных функций. Виртуальная машина вызывает этот метод, чтобы найти нативные библиотеки, относящиеся к классам, загруженным с помощью этого загрузчика классов. Если этот метод возвращает null, виртуальная машина ищет библиотеку по пути, указанному в системной переменной "java.library.path".
- Параметры:
-
libname- Имя библиотеки - Возвращает:
- Абсолютный путь к нативной библиотеке
- С:
- 1.2
- См. также:
-
System.loadLibrary(String),System.mapLibraryName(String)
setDefaultAssertionStatus
public void setDefaultAssertionStatus(boolean enabled)
Устанавливает состояние утверждения по умолчанию для этого загрузчика классов. Это значение определяет, будут ли в будущем классы, загруженные этим загрузчиком классов, иметь включённые по умолчанию утверждения или выключены. Это значение может быть переопределено на основе пакета или класса с помощью вызова setPackageAssertionStatus(String, boolean) или setClassAssertionStatus(String, boolean).
- Параметры:
-
enabled-trueесли классы, загруженные этим загрузчиком классов, в дальнейшем будут иметь включённые по умолчанию проверки,falseесли они будут иметь отключённые по умолчанию проверки. - С:
- 1.4
setPackageAssertionStatus
public void setPackageAssertionStatus(String packageName,
boolean enabled) Устанавливает состояние проверки по умолчанию для пакета с указанным именем. Состояние проверки по умолчанию для пакета определяет состояние проверок для классов, инициализированных в будущем, которые принадлежат указанному пакету или любому из его «подпакетов».
Подпакет пакета с именем p — это любой пакет, имя которого начинается с «p.». Например, javax.swing.text является подпакетом javax.swing, и оба java.util и java.lang.reflect являются подпакетами java.
В случае, если для данного класса применяются несколько значений по умолчанию для пакетов, значение по умолчанию для наиболее специфичного пакета имеет приоритет над другими. Например, если javax.lang и javax.lang.reflect оба имеют значения по умолчанию для пакетов, последнее значение по умолчанию для пакета применяется к классам в javax.lang.reflect.
Значения по умолчанию для пакетов имеют приоритет над значением по умолчанию для загрузчика классов и могут быть переопределены на уровне каждого класса путём вызова setClassAssertionStatus(String, boolean).
- Параметры:
-
packageName- Имя пакета, для которого необходимо установить состояние проверки по умолчанию. Значениеnullуказывает на неопределённый пакет, который является «текущим» (см. раздел 7.4.2 спецификации языка Java™). -
enabled-trueесли классы, загруженные этим загрузчиком классов и принадлежащие указанному пакету или любому из его подпакетов, будут иметь проверки включёнными по умолчанию,falseесли они будут иметь проверки выключенными по умолчанию. - С:
- 1.4
setClassAssertionStatus
public void setClassAssertionStatus(String className,
boolean enabled) Устанавливает желаемое состояние проверок для указанного верхнего класса в этом загрузчике классов и всех вложенных классов. Это значение имеет приоритет над значением по умолчанию для загрузчика классов и над любым применимым значением по умолчанию для пакета. Этот метод не имеет эффекта, если указанный класс уже был инициализирован. (После инициализации класса его состояние проверок изменить нельзя.)
Если указанный класс не является верхним классом, это обращение не повлияет на фактическое состояние проверок любого класса.
- Параметры:
-
className- Полное имя класса верхнего уровня, для которого нужно установить состояние проверок. -
enabled-trueесли для указанного класса проверки должны быть включены при (и если) он инициализирован,falseесли для класса проверки должны быть выключены. - С:
- 1.4
clearAssertionStatus
public void clearAssertionStatus()
Устанавливает значение состояния проверок по умолчанию для этого загрузчика классов на false и отбрасывает все значения по умолчанию для пакетов или состояния проверок для класса, связанные с загрузчиком классов. Этот метод предоставляется для того, чтобы загрузчики классов могли игнорировать любые командные строки или постоянные настройки состояния проверок и «начинать с чистого листа».
- С:
- 1.4
© 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.