ClassLoader Clase

Definición

Un cargador de clases es un objeto responsable de cargar clases.

[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
Herencia
ClassLoader
Derivado
Atributos

Comentarios

Un cargador de clases es un objeto responsable de cargar clases. La clase ClassLoader es una clase abstracta. Dado el nombre binario de una clase, un cargador de clases debe intentar localizar o generar datos que constituyen una definición para la clase. Una estrategia típica consiste en transformar el nombre en un nombre de archivo y, a continuación, leer un "archivo de clase" de ese nombre desde un sistema de archivos.

Cada java.lang.Class Class objeto contiene un Class#getClassLoader() reference objeto al ClassLoader que lo definió.

ClassLos cargadores de clases de clase no crean objetos para las clases de matriz, pero se crean automáticamente según sea necesario en el entorno de ejecución de Java. El cargador de clases para una clase de matriz, tal como lo devuelve Class#getClassLoader() , es el mismo que el cargador de clases para su tipo de elemento; si el tipo de elemento es un tipo primitivo, la clase de matriz no tiene ningún cargador de clases.

Las aplicaciones implementan subclases de ClassLoader para ampliar la manera en que la máquina virtual Java carga dinámicamente las clases.

Los administradores de seguridad pueden usar normalmente cargadores de clases para indicar dominios de seguridad.

Además de cargar clases, un cargador de clases también es responsable de localizar recursos. Un recurso es algunos datos (un archivo ".class", datos de configuración o una imagen, por ejemplo) que se identifica con un nombre de ruta de acceso abstracto "/" separado. Normalmente, los recursos se empaquetan con una aplicación o biblioteca para que se puedan ubicar mediante código en la aplicación o biblioteca. En algunos casos, los recursos se incluyen para que otras bibliotecas puedan ubicarlos.

La ClassLoader clase usa un modelo de delegación para buscar clases y recursos. Cada instancia de tiene un cargador de ClassLoader clases primario asociado. Cuando se solicita encontrar una clase o recurso, una ClassLoader instancia normalmente delegará la búsqueda de la clase o recurso en su cargador de clases primaria antes de intentar encontrar la clase o el propio recurso.

Los cargadores de clases que admiten la carga simultánea de clases se conocen como <cargadores de clases em>#isRegisteredAsParallelCapable() parallel capable</em> y son necesarios para registrarse en su tiempo de inicialización de clase invocando el #registerAsParallelCapable ClassLoader.registerAsParallelCapable método . Tenga en cuenta que la ClassLoader clase se registra como compatible con paralelo de forma predeterminada. Sin embargo, sus subclases siguen teniendo que registrarse si son compatibles con paralelos. En entornos en los que el modelo de delegación no es estrictamente jerárquico, los cargadores de clases deben ser compatibles con paralelo; de lo contrario, la carga de clases puede provocar interbloqueos porque el bloqueo del cargador se mantiene durante el proceso de carga de clases (vea #loadClass loadClass métodos).

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

El Java tiempo de ejecución tiene los siguientes cargadores de clases integrados:

<ul><li>

Cargador de clases bootstrap. Es el cargador de clases integrado de la máquina virtual, que normalmente se representa como nully no tiene un elemento primario.</li li><>

#getSystemClassLoader() Cargador de clases del sistema. También se conoce como <cargador de clases>< de aplicación em>y es distinto del cargador de clases de plataforma. Normalmente, el cargador de clases del sistema se usa para definir clases en la ruta de acceso de la clase de aplicación, la ruta de acceso del módulo y las herramientas específicas de JDK. El cargador de clases de plataforma es el elemento primario o un antecesor de la clase de sistema cargador, por lo que el cargador de clases del sistema puede cargar clases de plataforma mediante la delegación en su elemento primario.</li></ul>

Normalmente, el Java máquina virtual carga clases desde el sistema de archivos local de forma dependiente de la plataforma. Sin embargo, es posible que algunas clases no se originen en un archivo; pueden originarse en otros orígenes, como la red, o bien se podrían construir mediante una aplicación. El método #defineClass(String, byte[], int, int) defineClass convierte una matriz de bytes en una instancia de la clase Class. Las instancias de esta clase recién definida se pueden crear mediante Class#newInstance Class.newInstance.

Los métodos y constructores de objetos creados por un cargador de clases pueden hacer referencia a otras clases. Para determinar las clases a las que se hace referencia, el Java máquina virtual invoca el #loadClass loadClass método del cargador de clases que creó originalmente la clase.

Por ejemplo, una aplicación podría crear un cargador de clases de red para descargar archivos de clase de un servidor. El código de ejemplo podría ser similar al siguiente:

<blockquote>

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

</blockquote>

La subclase del cargador de clases de red debe definir los métodos #findClass findClass y loadClassData cargar una clase desde la red. Una vez que haya descargado los bytes que componen la clase , debe usar el método #defineClass defineClass para crear una instancia de clase. Una implementación de ejemplo es:

<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> "binary-name">Nombres< binarios/h3>

Cualquier nombre de clase proporcionado como String parámetro para los métodos de ClassLoader debe ser un nombre binario tal como se define mediante <la cita>The Java Language Specification</cite>.

Algunos ejemplos de nombres de clase válidos son: <blockquote>

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

</blockquote>

Cualquier nombre de paquete proporcionado como parámetro para los métodos de debe ser la cadena vacía (lo que indica un paquete sin nombre) o un nombre completo, tal como String se define enClassLoader< El Java Language Specification>/cite<.>

Agregado en la versión 1.0.

Documentación de Java para java.lang.ClassLoader.

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.

Constructores

Nombre Description
ClassLoader()

Crea un cargador de clases con el ClassLoader devuelto por el método #getSystemClassLoader() getSystemClassLoader() como cargador de clases primario.

ClassLoader(ClassLoader)

Crea un cargador de clases con el cargador de clases primario especificado para la delegación.

ClassLoader(IntPtr, JniHandleOwnership)

Constructor utilizado al crear representaciones administradas de objetos JNI; llamado por el tiempo de ejecución.

Propiedades

Nombre Description
Class

Devuelve la clase en tiempo de ejecución de este Objectobjeto .

(Heredado de Object)
Handle

Identificador de la instancia de Android subyacente.

(Heredado de Object)
JniIdentityHashCode

Obtiene el código hash de identidad asignado a este Java del mismo nivel por el tiempo de ejecución de interoperabilidad.

(Heredado de Object)
JniManagedPeerState

Un cargador de clases es un objeto responsable de cargar clases.

(Heredado de JavaObject)
JniPeerMembers

Obtiene los metadatos de JNI usados para invocar miembros de este Java del mismo nivel.

Parent

Devuelve el cargador de clases primario para la delegación.

PeerReference

Obtiene la referencia de objeto JNI para este Java del mismo nivel.

(Heredado de Object)
SystemClassLoader

Devuelve el cargador de clases del sistema.

ThresholdClass

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

ThresholdType

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

Métodos

Nombre Description
ClearAssertionStatus()

Establece el estado de aserción predeterminado para este cargador false de clases en y descarta los valores predeterminados del paquete o la configuración de estado de aserción de clase asociada al cargador de clases.

Clone()

Crea y devuelve una copia de este objeto.

(Heredado de Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

Un cargador de clases es un objeto responsable de cargar clases.

(Heredado de JavaObject)
DefineClass(Byte[], Int32, Int32)
Obsoletos.

Convierte una matriz de bytes en una instancia de la clase Class.

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

Convierte una matriz de bytes en una instancia de la clase Class, con un determinado ProtectionDomain.

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

Convierte una matriz de bytes en una instancia de la clase Class.

DefineClass(String, ByteBuffer, ProtectionDomain)

Convierte un java.nio.ByteBuffer ByteBuffer objeto en una instancia de la clase Class, con el especificado ProtectionDomain.

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

Define un paquete por nombre en este ClassLoader.

Dispose()

Libera los recursos mantenidos por este Java del mismo nivel.

(Heredado de Object)
Dispose(Boolean)

Libera los recursos mantenidos por este Java del mismo nivel.

(Heredado de Object)
DisposeUnlessReferenced()

Un cargador de clases es un objeto responsable de cargar clases.

(Heredado de JavaObject)
Equals(Object)

Un cargador de clases es un objeto responsable de cargar clases.

(Heredado de JavaObject)
Equals(Object)

Indica si algún otro objeto es "igual a" este.

(Heredado de Object)
FindClass(String)

Busca la clase con el nombre binario especificado.

FindLibrary(String)

Devuelve el nombre de ruta de acceso absoluta de una biblioteca nativa.

FindLoadedClass(String)

Devuelve la clase con el nombre binario especificado si el Java máquina virtual ha registrado este cargador como cargador iniciador de una clase con ese nombre binario.

FindResource(String)

Busca el recurso con el nombre especificado.

FindResources(String)

Devuelve una enumeración de java.net.URL URL objetos que representan todos los recursos con el nombre especificado.

FindSystemClass(String)

Busca una clase con el nombre binario especificado y lo carga si es necesario.

GetHashCode()

Devuelve un valor de código hash del objeto.

(Heredado de Object)
GetPackage(String)

Busca un paquete por nombre en este cargador de clases y sus antecesores.

GetPackages()

Devuelve todos los Packagevalores definidos por este cargador de clases y sus antecesores.

GetResource(String)

Busca el recurso con el nombre especificado.

GetResourceAsStream(String)

Devuelve un flujo de entrada para leer el recurso especificado.

GetResources(String)

Busca todos los recursos con el nombre especificado.

GetSystemResource(String)

Busque un recurso del nombre especificado de la ruta de acceso de búsqueda que se usa para cargar clases.

GetSystemResourceAsStream(String)

Abra para leer, un recurso del nombre especificado de la ruta de búsqueda que se usa para cargar clases.

GetSystemResources(String)

Busca todos los recursos del nombre especificado de la ruta de búsqueda que se usa para cargar clases.

JavaFinalize()

Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto .

(Heredado de Object)
LoadClass(String, Boolean)

Carga la clase con el nombre binario especificado.

LoadClass(String)

Carga la clase con el nombre binario especificado.

LoadClassAsync(String, Boolean)

Carga asincrónicamente la clase con el nombre especificado.

LoadClassAsync(String)

Carga asincrónicamente la clase con el nombre especificado.

Notify()

Activa un único subproceso que está esperando en el monitor de este objeto.

(Heredado de Object)
NotifyAll()

Activa todos los subprocesos que están esperando en el monitor de este objeto.

(Heredado de Object)
RegisterAsParallelCapable()

Registra el autor de la llamada como #isRegisteredAsParallelCapable() parallel capable.

ResolveClass(Class)

Vincula la clase especificada.

SetClassAssertionStatus(String, Boolean)

Establece el estado de aserción deseado para la clase de nivel superior con nombre en este cargador de clases y todas las clases anidadas contenidas en ella.

SetDefaultAssertionStatus(Boolean)

Establece el estado de aserción predeterminado para este cargador de clases.

SetHandle(IntPtr, JniHandleOwnership)

Establece la propiedad Handle.

(Heredado de Object)
SetPackageAssertionStatus(String, Boolean)

Establece el estado de aserción predeterminado del paquete para el paquete con nombre.

SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Un cargador de clases es un objeto responsable de cargar clases.

(Heredado de JavaObject)
SetSigners(Class, Object[])

Establece los firmantes de una clase.

ToArray<T>()

Crea una matriz administrada a partir de este contenedor de matriz Java.

(Heredado de Object)
ToString()

Devuelve una representación de cadena del objeto.

(Heredado de Object)
UnregisterFromRuntime()

Anula el registro de este Java del mismo nivel del tiempo de ejecución de interoperabilidad.

(Heredado de Object)
Wait()

Hace que el subproceso actual espere hasta que se despierta, normalmente por ser em notificado/em< o >em<interrumpido>/em<.><>

(Heredado de Object)
Wait(Int64, Int32)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)
Wait(Int64)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)

Implementaciones de interfaz explícitas

Nombre Description
IJavaPeerable.Disposed()

Un cargador de clases es un objeto responsable de cargar clases.

(Heredado de JavaObject)
IJavaPeerable.Finalized()

Un cargador de clases es un objeto responsable de cargar clases.

(Heredado de JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Un cargador de clases es un objeto responsable de cargar clases.

(Heredado de JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Un cargador de clases es un objeto responsable de cargar clases.

(Heredado de JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Un cargador de clases es un objeto responsable de cargar clases.

(Heredado de JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Un cargador de clases es un objeto responsable de cargar clases.

(Heredado de JavaObject)

Métodos de extensión

Nombre Description
GetJniTypeName(IJavaPeerable)

Obtiene el nombre JNI del tipo de la instancia self.

JavaAs<TResult>(IJavaPeerable)

Intente coerción self para escribir TResult, comprobando que la coerción es válida en el lado de Java.

JavaCast<TResult>(IJavaObject)

Realiza una conversión de tipos comprobados en tiempo de ejecución de Android.

JavaCast<TResult>(IJavaObject)

Un cargador de clases es un objeto responsable de cargar clases.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Intente coerción self para escribir TResult, comprobando que la coerción es válida en el lado de Java.

Se aplica a