Spec-Zone.ru › OpenJDK 8

Класс ClassLoader

  • java.lang.Object
    • java.lang.ClassLoader
Прямые известные подклассы:
SecureClassLoader

public abstract class ClassLoader
extends Object

Класс загрузчик классов — это объект, ответственный за загрузку классов. Класс ClassLoader — абстрактный класс. Учитывая бинарное имя класса, загрузчик классов должен попытаться найти или сгенерировать данные, составляющие определение класса. Типичная стратегия заключается в преобразовании имени в имя файла и затем чтении «файла класса» с таким именем из файловой системы.

Каждый объект Class содержит ссылку на reference на загрузчик, который его определил.

Объекты для классов массивов не создаются загрузчиками классов, а создаются автоматически по мере необходимости Java-средой выполнения. Загрузчик класса массива, возвращаемый методом Class.getClassLoader(), такой же, как и загрузчик класса его элемента; если тип элемента — примитивный тип, то массив класса не имеет загрузчика.

Приложения реализуют подклассы ClassLoader для расширения способа динамической загрузки классов Java-виртуальной машиной.

Загрузчики классов могут использоваться менеджерами безопасности для указания областей безопасности.

Класс ClassLoader использует модель делегирования для поиска классов и ресурсов. Каждый экземпляр ClassLoader имеет связанный родительский загрузчик классов. При запросе поиска класса или ресурса экземпляр ClassLoader делегирует поиск родительскому загрузчику классов, прежде чем попытаться найти класс или ресурс самостоятельно. Встроенный загрузчик классов виртуальной машины, называемый «bootstrap class loader», сам по себе не имеет родителя, но может служить родителем экземпляра ClassLoader.

Загрузчики классов, поддерживающие одновременную загрузку классов, известны как параллельно-способные загрузчики классов и обязаны зарегистрировать себя во время инициализации класса, вызвав метод ClassLoader.registerAsParallelCapable. Обратите внимание, что класс ClassLoader по умолчанию зарегистрирован как параллельно-способный. Однако его подклассы по-прежнему должны зарегистрировать себя, если они параллельно-способные.
В средах, в которых модель делегирования не является строго иерархической, загрузчики классов должны быть параллельно-способными, в противном случае загрузка классов может привести к тупиковым ситуациям, потому что блокировка загрузчика удерживается на все время процесса загрузки класса (см. методы loadClass).

Обычно Java-виртуальная машина загружает классы из локальной файловой системы зависимым от платформы способом. Например, в системах UNIX виртуальная машина загружает классы из каталога, определённого переменной среды CLASSPATH.

Однако некоторые классы могут не происходить из файла; они могут происходить из других источников, таких как сеть, или они могут быть созданы приложением. Метод 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"
С момента:
1.0
См. также:
resolveClass(Class)

Конструкторы

Модификатор Конструктор и описание
protected ClassLoader()

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

protected ClassLoader(ClassLoader parent)

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

Методы

Модификатор и тип Метод и описание
void clearAssertionStatus()

Устанавливает состояние проверки по умолчанию для этого загрузчика классов в false и отбрасывает любые настройки проверки пакета или класса, связанные с загрузчиком классов.

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)

Преобразует массив байтов в экземпляр класса Class.

protected Class<?> defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain)

Преобразует массив байтов в экземпляр класса Class, с необязательным ProtectionDomain.

protected 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 String findLibrary(String libname)

Возвращает абсолютный путь к нативному библиотеке.

protected Class<?> findLoadedClass(String name)

Возвращает класс с заданным бинарным именем, если этот загрузчик был зарегистрирован Java-виртуальной машиной как инициирующий загрузчик класса с таким бинарным именем.

protected URL findResource(String name)

Находит ресурс с данным именем.

protected Enumeration<URL> findResources(String name)

Возвращает перечисление объектов URL, представляющих все ресурсы с заданным именем.

protected Class<?> findSystemClass(String name)

Находит класс с указанным бинарным именем, загружая его при необходимости.

protected Object getClassLoadingLock(String className)

Возвращает объект блокировки для операций загрузки класса.

protected Package getPackage(String name)

Возвращает Package, определённый этим загрузчиком классов или любым из его предков.

protected Package[] getPackages()

Возвращает все Packages определённые этим загрузчиком классов и его предками.

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

Загружает класс с указанным бинарным именем. Базовая реализация этого метода ищет классы в следующем порядке:

  1. Вызывает findLoadedClass(String) для проверки, был ли класс уже загружен.

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

  3. Вызывает метод 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

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 он должен быть разрешен.

Этот метод назначает стандартную ProtectionDomain новому определённому классу. ProtectionDomain фактически предоставляется тот же набор разрешений, возвращаемый при вызове Policy.getPolicy().getPermissions(new CodeSource(null, null)). Стандартная область создаётся при первом вызове defineClass и повторно используется в последующих вызовах.

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

Параметры:
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). Перед использованием класса он должен быть разрешен.

Первый класс, определённый в пакете, определяет точный набор сертификатов, которые должны содержать все последующие классы, определённые в этом пакете. Набор сертификатов для класса извлекается из CodeSource внутри ProtectionDomain класса. Любые классы, добавленные в этот пакет, должны содержать тот же набор сертификатов, иначе будет брошено исключение 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

Преобразует ByteBuffer в экземпляр класса Class, с необязательным 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()

Регистрирует вызывающий объект как способный к параллельной работе. Регистрация успешна только в том случае, если выполнены все следующие условия:

  1. не был создан ни один экземпляр вызывающего объекта
  2. все суперклассы (кроме класса Object) вызывающего объекта зарегистрированы как способные к параллельной работе

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

Возвращает:
true, если вызывающий объект успешно зарегистрирован как способный к параллельной работе, и false в противном случае.
С:
1.7

getSystemResource

public static URL getSystemResource(String name)

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

Параметры:
name - Имя ресурса
Возвращает:
Объект URL для чтения ресурса или null, если ресурс не найден
С:
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.

Spec-Zone.ru

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