Язык

ClassLoader Класс

Определение

Загрузчик класса — это объект, отвечающий за загрузку классов.

[Android.Runtime.Register("java/lang/ClassLoader", DoNotGenerateAcw=true)]
public abstract class ClassLoader : Java.Lang.Object
[<Android.Runtime.Register("java/lang/ClassLoader", DoNotGenerateAcw=true)>]
type ClassLoader = class
    inherit Object
Наследование
ClassLoader
Производный
Атрибуты

Комментарии

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

Каждый java.lang.Class Class объект содержит определенный Class#getClassLoader() referenceClassLoader им объект.

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

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

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

Помимо загрузки классов, загрузчик классов также отвечает за поиск ресурсов. Ресурс представляет собой некоторые данные (файл ".class", данные конфигурации или изображение, например), которые идентифицируются с абстрактным именем пути "/". Ресурсы обычно упаковываются в приложение или библиотеку, чтобы они могли находиться по коду в приложении или библиотеке. В некоторых случаях ресурсы включаются таким образом, чтобы они могли находиться другими библиотеками.

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

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

<h2> "builtinLoaders">Run-time Built-in Class Loaders</h2>

Во время выполнения Java есть следующие встроенные загрузчики классов:

<ul><li>

Загрузчик класса Bootstrap. Это встроенный загрузчик класса виртуальной машины, как правило, представленный как nullи не имеет родительского элемента.</li li><>

загрузчик системного класса #getSystemClassLoader(). Он также известен как <>загрузчик< класса em или em> и отличается от загрузчика класса платформы. Загрузчик системного класса обычно используется для определения классов по пути класса приложения, пути модуля и средств JDK. Загрузчик классов платформы является родительским или предком загрузчика системного класса, поэтому загрузчик системного класса может загружать классы платформы, делегируя его родительским элементам.</li></ul>

Как правило, виртуальная машина Java загружает классы из локальной файловой системы в зависимости от платформы. Однако некоторые классы могут не возникать из файла; они могут быть получены из других источников, таких как сеть, или они могут быть созданы приложением. Метод #defineClass(String, byte[], int, int) defineClass преобразует массив байтов в экземпляр класса Class. Экземпляры этого нового класса можно создать с помощью Class#newInstance Class.newInstance.

Методы и конструкторы объектов, созданных загрузчиком классов, могут ссылать на другие классы. Чтобы определить класс(es), на которую ссылается, виртуальная машина Java вызывает #loadClass loadClass метод загрузчика классов, который первоначально создал класс.

Например, приложение может создать загрузчик сетевого класса для скачивания файлов классов с сервера. Пример кода может выглядеть следующим образом:

<blockquote>

ClassLoader loader&nbsp;= new NetworkClassLoader(host,&nbsp;port);
              Object main&nbsp;= loader.loadClass("Main", true).newInstance();
                  &nbsp;.&nbsp;.&nbsp;.

</blockquote>

Подкласс загрузчика сетевого класса должен определять методы #findClass findClass и loadClassData загружать класс из сети. После скачивания байтов, составляющих класс, он должен использовать метод #defineClass defineClass для создания экземпляра класса. Пример реализации:

<blockquote>

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
                        &nbsp;.&nbsp;.&nbsp;.
                    }
                }

</blockquote>

<h3> "двоичное имя">Двоичные имена</h3>

Любое имя класса, предоставленное в качестве String параметра для методов, ClassLoader должно быть двоичным именем, <как определено в cite>The Java Language Specification</cite>.

Примеры допустимых имен классов: <blockquote>

"java.lang.String"
              "javax.swing.JSpinner$DefaultEditor"
              "java.security.KeyStore$Builder$FileBuilder$1"
              "java.net.URLClassLoader$3$1"

</blockquote>

Любое имя пакета, предоставленное в качестве String параметра для методовClassLoader, должно быть пустой строкой (обозначающей неименованный пакет) или полным именем, <определенным в разделе ">Спецификация< языка Java/cite>".

Добавлено в версии 1.0.

Документация по Java для java.lang.ClassLoader.

Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.

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

Имя. Описание
ClassLoader()

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

ClassLoader(ClassLoader)

Создает загрузчик класса с помощью указанного загрузчика родительского класса для делегирования.

ClassLoader(IntPtr, JniHandleOwnership)

Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.

Свойства

Имя. Описание
Class

Возвращает класс среды выполнения этого Objectобъекта.

(Унаследовано от Object)
Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
JniIdentityHashCode

Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия.

(Унаследовано от Object)
JniManagedPeerState

Загрузчик класса — это объект, отвечающий за загрузку классов.

(Унаследовано от JavaObject)
JniPeerMembers

Возвращает метаданные JNI, используемые для вызова элементов этого Java однорангового узла.

Parent

Возвращает загрузчик родительского класса для делегирования.

PeerReference

Возвращает ссылку на объект JNI для этого Java однорангового узла.

(Унаследовано от Object)
SystemClassLoader

Возвращает загрузчик системного класса.

ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

Методы

Имя. Описание
ClearAssertionStatus()

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

Clone()

Создает и возвращает копию этого объекта.

(Унаследовано от Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

Загрузчик класса — это объект, отвечающий за загрузку классов.

(Унаследовано от JavaObject)
DefineClass(Byte[], Int32, Int32)
Устаревшие.

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

DefineClass(String, Byte[], Int32, Int32, ProtectionDomain)

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

DefineClass(String, Byte[], Int32, Int32)

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

DefineClass(String, ByteBuffer, ProtectionDomain)

Преобразует объект java.nio.ByteBuffer ByteBuffer в экземпляр класса Classс заданным ProtectionDomain.

DefinePackage(String, String, String, String, String, String, String, URL)

Определяет пакет по имени в этом ClassLoader.

Dispose()

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
Dispose(Boolean)

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
DisposeUnlessReferenced()

Загрузчик класса — это объект, отвечающий за загрузку классов.

(Унаследовано от JavaObject)
Equals(Object)

Загрузчик класса — это объект, отвечающий за загрузку классов.

(Унаследовано от JavaObject)
Equals(Object)

Указывает, равен ли другой объект этому объекту.

(Унаследовано от Object)
FindClass(String)

Находит класс с указанным двоичным именем.

FindLibrary(String)

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

FindLoadedClass(String)

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

FindResource(String)

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

FindResources(String)

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

FindSystemClass(String)

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

GetHashCode()

Возвращает значение хэш-кода для объекта.

(Унаследовано от Object)
GetPackage(String)

Находит пакет по имени в этом загрузчике класса и его предках.

GetPackages()

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

GetResource(String)

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

GetResourceAsStream(String)

Возвращает входной поток для чтения указанного ресурса.

GetResources(String)

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

GetSystemResource(String)

Найдите ресурс указанного имени из пути поиска, используемого для загрузки классов.

GetSystemResourceAsStream(String)

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

GetSystemResources(String)

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

JavaFinalize()
Устаревшие.

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

(Унаследовано от Object)
LoadClass(String, Boolean)

Загружает класс с указанным двоичным именем.

LoadClass(String)

Загружает класс с указанным двоичным именем.

LoadClassAsync(String, Boolean)

Асинхронно загружает класс с указанным именем.

LoadClassAsync(String)

Асинхронно загружает класс с указанным именем.

Notify()

Пробуждение одного потока, ожидающего монитора этого объекта.

(Унаследовано от Object)
NotifyAll()

Просыпает все потоки, ожидающие монитора этого объекта.

(Унаследовано от Object)
RegisterAsParallelCapable()

Регистрирует вызывающий объект как #isRegisteredAsParallelCapable() parallel capable.

ResolveClass(Class)

Связывает указанный класс.

SetClassAssertionStatus(String, Boolean)

Задает требуемое состояние утверждения для именованного класса верхнего уровня в загрузчике этого класса и всех вложенных классов, содержащихся в нем.

SetDefaultAssertionStatus(Boolean)

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

SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
SetPackageAssertionStatus(String, Boolean)

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

SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Загрузчик класса — это объект, отвечающий за загрузку классов.

(Унаследовано от JavaObject)
SetSigners(Class, Object[])

Задает подписи класса.

ToArray<T>()

Создает управляемый массив из этого Java оболочки массива.

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
UnregisterFromRuntime()

Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия.

(Унаследовано от Object)
Wait()

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>помощи уведомления</em> или <эм>прерванного</em>.

(Унаследовано от Object)
Wait(Int64, Int32)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)
Wait(Int64)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)

Явные реализации интерфейса

Имя. Описание
IJavaPeerable.Disposed()

Загрузчик класса — это объект, отвечающий за загрузку классов.

(Унаследовано от JavaObject)
IJavaPeerable.Finalized()

Загрузчик класса — это объект, отвечающий за загрузку классов.

(Унаследовано от JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Загрузчик класса — это объект, отвечающий за загрузку классов.

(Унаследовано от JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Загрузчик класса — это объект, отвечающий за загрузку классов.

(Унаследовано от JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Загрузчик класса — это объект, отвечающий за загрузку классов.

(Унаследовано от JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Загрузчик класса — это объект, отвечающий за загрузку классов.

(Унаследовано от JavaObject)

Методы расширения

Имя. Описание
GetJniTypeName(IJavaPeerable)

Возвращает имя JNI типа экземпляра self.

JavaAs<TResult>(IJavaPeerable)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Загрузчик класса — это объект, отвечающий за загрузку классов.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

Применяется к