| java.lang.Object java.lang.ClassLoader
All known Subclasses: com.sun.xlet.ixc.IxcClassLoader, java.security.SecureClassLoader,
ClassLoader | abstract public class ClassLoader (Code) | | A class loader is an object that is responsible for loading classes. The
class ClassLoader is an abstract class. Given the name of a
class, a class loader should attempt to locate or generate data that
constitutes a definition for the class. A typical strategy is to transform
the name into a file name and then read a "class file" of that name
from a file system.
Every
Class Class object contains a
Class.getClassLoader reference to the ClassLoader that defined
it.
Class objects for array classes are not created by class
loaders, but are created automatically as required by the Java runtime.
The class loader for an array class, as returned by
Class.getClassLoader is the same as the class loader for its element
type; if the element type is a primitive type, then the array class has no
class loader.
Applications implement subclasses of ClassLoader in order to
extend the manner in which the Java virtual machine dynamically loads
classes.
Class loaders may typically be used by security managers to indicate
security domains.
The ClassLoader class uses a delegation model to search for
classes and resources. Each instance of ClassLoader has an
associated parent class loader. When requested to find a class or
resource, a ClassLoader instance will delegate the search for the
class or resource to its parent class loader before attempting to find the
class or resource itself. The virtual machine's built-in class loader,
called the "bootstrap class loader", does not itself have a parent but may
serve as the parent of a ClassLoader instance.
Normally, the Java virtual machine loads classes from the local file
system in a platform-dependent manner. For example, on UNIX systems, the
virtual machine loads classes from the directory defined by the
CLASSPATH environment variable.
However, some classes may not originate from a file; they may originate
from other sources, such as the network, or they could be constructed by an
application. The method
ClassLoader.defineClass(String,byte[],int,int)defineClass converts an array of bytes into an instance of class
Class. Instances of this newly defined class can be created using
Class.newInstance Class.newInstance .
The methods and constructors of objects created by a class loader may
reference other classes. To determine the class(es) referred to, the Java
virtual machine invokes the
ClassLoader.loadClass loadClass method of
the class loader that originally created the class.
For example, an application could create a network class loader to
download class files from a server. Sample code might look like:
ClassLoader loader = new NetworkClassLoader(host, port);
Object main = loader.loadClass("Main", true).newInstance();
. . .
The network class loader subclass must define the methods
ClassLoader.findClass findClass and loadClassData to load a class
from the network. Once it has downloaded the bytes that make up the class,
it should use the method
ClassLoader.defineClass defineClass to
create a class instance. A sample implementation is:
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
. . .
}
}
version: 1.163, 10/10/06 See Also: ClassLoader.resolveClass(Class) since: 1.0 |
Inner Class :static class NativeLibrary | |
Method Summary | |
void | addClass(Class c) | public synchronized void | clearAssertionStatus() Sets the default assertion status for this class loader to
false and discards any package defaults or class assertion
status settings associated with the class loader. | final protected Class | defineClass(String name, byte[] b, int off, int len) Converts an array of bytes into an instance of class Class.
Before the Class can be used it must be resolved.
This method assigns a default
java.security.ProtectionDomainProtectionDomain to the newly defined class. | final protected Class | defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain) Converts an array of bytes into an instance of class Class,
with an optional ProtectionDomain. | protected Package | definePackage(String name, String specTitle, String specVersion, String specVendor, String implTitle, String implVersion, String implVendor, URL sealBase) Defines a package by name in this ClassLoader. | synchronized boolean | desiredAssertionStatus(String className) Returns the assertion status that would be assigned to the specified
class if it were to be initialized at the time this method is invoked.
If the named class has had its assertion status set, the most recent
setting will be returned; otherwise, if any package default assertion
status pertains to this class, the most recent setting for the most
specific pertinent package default assertion status is returned;
otherwise, this class loader's default assertion status is returned.
Parameters: className - The fully qualified class name of the class whose desiredassertion status is being queried. | protected Class | findClass(String name) Finds the specified class. | protected String | findLibrary(String libname) Returns the absolute path name of a native library. | final protected Class | findLoadedClass(String name) Returns the class with the given name if this loader has been recorded
by the Java virtual machine as an initiating loader of a class with
that name. | static long | findNative(ClassLoader loader, String name) | protected URL | findResource(String name) Finds the resource with the given name. | protected Enumeration | findResources(String name) Returns an enumeration of
java.net.URL URL objects
representing all the resources with the given name. | final protected Class | findSystemClass(String name) Finds a class with the specified name, loading it if necessary.
This method loads the class through the system class loader (see
ClassLoader.getSystemClassLoader() ). | static URLClassPath | getBootstrapClassPath() | native static ClassLoader | getCallerClassLoader() | protected Package | getPackage(String name) Returns a Package that has been defined by this class loader
or any of its ancestors. | protected Package[] | getPackages() Returns all of the Packages defined by this class loader and
its ancestors. | final public ClassLoader | getParent() Returns the parent class loader for delegation. | public URL | getResource(String name) Finds the resource with the given name. | public InputStream | getResourceAsStream(String name) Returns an input stream for reading the specified resource.
The search order is described in the documentation for
ClassLoader.getResource(String) . | final public Enumeration | getResources(String name) Finds all the resources with the given name. | public static ClassLoader | getSystemClassLoader() Returns the system class loader for delegation. | public static URL | getSystemResource(String name) Find a resource of the specified name from the search path used to load
classes. | public static InputStream | getSystemResourceAsStream(String name) Open for reading, a resource of the specified name from the search path
used to load classes. | public static Enumeration | getSystemResources(String name) Finds all resources of the specified name from the search path used to
load classes. | boolean | isAncestor(ClassLoader cl) | static Class | loadBootstrapClass(String name) | public Class | loadClass(String name) Loads the class with the specified name. | protected synchronized Class | loadClass(String name, boolean resolve) Loads the class with the specified name. | static void | loadLibrary(Class fromClass, String name, boolean isAbsolute) | final protected void | resolveClass(Class c) Links the specified class. | public synchronized void | setClassAssertionStatus(String className, boolean enabled) Sets the desired assertion status for the named top-level class in this
class loader and any nested classes contained therein. | public synchronized void | setDefaultAssertionStatus(boolean enabled) Sets the default assertion status for this class loader. | public synchronized void | setPackageAssertionStatus(String packageName, boolean enabled) Sets the package default assertion status for the named package. | final protected void | setSigners(Class c, Object[] signers) Sets the signers of a class. |
classAssertionStatus | Map classAssertionStatus(Code) | | |
ClassLoader | protected ClassLoader(ClassLoader parent)(Code) | | Creates a new class loader using the specified parent class loader for
delegation.
If there is a security manager, its
SecurityManager.checkCreateClassLoadercheckCreateClassLoader method is invoked. This may result in
a security exception.
Parameters: parent - The parent class loader throws: SecurityException - If a security manager exists and itscheckCreateClassLoader method doesn't allow creationof a new class loader. since: 1.2 |
ClassLoader | protected ClassLoader()(Code) | | Creates a new class loader using the ClassLoader returned by
the method
ClassLoader.getSystemClassLoader()getSystemClassLoader() as the parent class loader.
If there is a security manager, its
SecurityManager.checkCreateClassLoadercheckCreateClassLoader method is invoked. This may result in
a security exception.
throws: SecurityException - If a security manager exists and itscheckCreateClassLoader method doesn't allow creationof a new class loader. |
clearAssertionStatus | public synchronized void clearAssertionStatus()(Code) | | Sets the default assertion status for this class loader to
false and discards any package defaults or class assertion
status settings associated with the class loader. This method is
provided so that class loaders can be made to ignore any command line or
persistent assertion status settings and "start with a clean slate."
since: 1.4 |
defineClass | final protected Class defineClass(String name, byte[] b, int off, int len) throws ClassFormatError(Code) | | Converts an array of bytes into an instance of class Class.
Before the Class can be used it must be resolved.
This method assigns a default
java.security.ProtectionDomainProtectionDomain to the newly defined class. The
ProtectionDomain is effectively granted the same set of
permissions returned when
java.security.Policy.getPermissions(java.security.CodeSource)Policy.getPolicy().getPermissions(new CodeSource(null, null)) is invoked. The default domain is created on the first invocation of
ClassLoader.defineClass(String,byte[],int,int) defineClass ,
and re-used on subsequent invocations.
To assign a specific ProtectionDomain to the class, use
the
ClassLoader.defineClass(String,byte[],int,int,java.security.ProtectionDomain) defineClass method that takes a
ProtectionDomain as one of its arguments.
Parameters: name - The expected name of the class, or nullif not known, using '.' and not '/' as theseparator and without a trailing .class suffix. Parameters: b - The bytes that make up the class data. The bytes in positionsoff through off+len-1 should have the formatof a valid class file as defined by the Java VirtualMachine Specification. Parameters: off - The start offset in b of the class data Parameters: len - The length of the class data The Class object that was created from the specifiedclass data. throws: ClassFormatError - If the data did not contain a valid class throws: IndexOutOfBoundsException - If either off or len is negative, or ifoff+len is greater than b.length. throws: SecurityException - If an attempt is made to add this class to a package thatcontains classes that were signed by a different set ofcertificates than this class (which is unsigned), or if theclass name begins with "java.". See Also: ClassLoader.loadClass(String,boolean) See Also: ClassLoader.resolveClass(Class) See Also: java.security.CodeSource See Also: java.security.SecureClassLoader since: 1.1 |
defineClass | final protected Class defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain) throws ClassFormatError(Code) | | Converts an array of bytes into an instance of class Class,
with an optional ProtectionDomain. If the domain is
null, then a default domain will be assigned to the class as
specified in the documentation for
ClassLoader.defineClass(String,byte[],int,int) . Before the class can be used it must be resolved.
The first class defined in a package determines the exact set of
certificates that all subsequent classes defined in that package must
contain. The set of certificates for a class is obtained from the
java.security.CodeSource CodeSource within the
ProtectionDomain of the class. Any classes added to that
package must contain the same set of certificates or a
SecurityException will be thrown. Note that if the
name argument is null, this check is not performed.
You should always pass in the name of the class you are defining as
well as the bytes. This ensures that the class you are defining is
indeed the class you think it is.
The specified class name cannot begin with "java.", since
all classes in the "java.* packages can only be defined by the
bootstrap class loader. If the name parameter is not null, it
must be equal to the name of the class specified by the byte array
"b", otherwise a
NoClassDefFoundError will be
thrown.
Parameters: name - The expected name of the class, or null if not known,using '.' and not '/' as the separator andwithout a trailing ".class" suffix. Parameters: b - The bytes that make up the class data. The bytes in positionsoff through off+len-1 should have the formatof a valid class file as defined by the Java VirtualMachine Specification. Parameters: off - The start offset in b of the class data Parameters: len - The length of the class data Parameters: protectionDomain - The ProtectionDomain of the class The Class object created from the data,and optional ProtectionDomain. throws: ClassFormatError - If the data did not contain a valid class throws: NoClassDefFoundError - If name is not equal to the name of the classspecified by b throws: IndexOutOfBoundsException - If either off or len is negative, or ifoff+len is greater than b.length. throws: SecurityException - If an attempt is made to add this class to a package thatcontains classes that were signed by a different set ofcertificates than this class, or if the class name begins with"java.". |
definePackage | protected Package definePackage(String name, String specTitle, String specVersion, String specVendor, String implTitle, String implVersion, String implVendor, URL sealBase) throws IllegalArgumentException(Code) | | Defines a package by name in this ClassLoader. This allows
class loaders to define the packages for their classes. Packages must
be created before the class is defined, and package names must be
unique within a class loader and cannot be redefined or changed once
created.
Parameters: name - The package name Parameters: specTitle - The specification title Parameters: specVersion - The specification version Parameters: specVendor - The specification vendor Parameters: implTitle - The implementation title Parameters: implVersion - The implementation version Parameters: implVendor - The implementation vendor Parameters: sealBase - If not null, then this package is sealed withrespect to the given code source java.net.URLURL object. Otherwise, the package is not sealed. The newly defined Package object throws: IllegalArgumentException - If package name duplicates an existing package either in thisclass loader or one of its ancestors since: 1.2 |
desiredAssertionStatus | synchronized boolean desiredAssertionStatus(String className)(Code) | | Returns the assertion status that would be assigned to the specified
class if it were to be initialized at the time this method is invoked.
If the named class has had its assertion status set, the most recent
setting will be returned; otherwise, if any package default assertion
status pertains to this class, the most recent setting for the most
specific pertinent package default assertion status is returned;
otherwise, this class loader's default assertion status is returned.
Parameters: className - The fully qualified class name of the class whose desiredassertion status is being queried. The desired assertion status of the specified class. See Also: ClassLoader.setClassAssertionStatus(String,boolean) See Also: ClassLoader.setPackageAssertionStatus(String,boolean) See Also: ClassLoader.setDefaultAssertionStatus(boolean) since: 1.4 |
findClass | protected Class findClass(String name) throws ClassNotFoundException(Code) | | Finds the specified class. This method should be overridden by class
loader implementations that follow the delegation model for loading
classes, and will be invoked by the
ClassLoader.loadClassloadClass method after checking the parent class loader for
the requested class. The default implementation throws a
ClassNotFoundException.
Parameters: name - The name of the class The resulting Class object throws: ClassNotFoundException - If the class could not be found since: 1.2 |
findLibrary | protected String findLibrary(String libname)(Code) | | Returns the absolute path name of a native library. The VM invokes this
method to locate the native libraries that belong to classes loaded with
this class loader. If this method returns null, the VM
searches the library along the path specified as the
"java.library.path" property.
Parameters: libname - The library name The absolute path of the native library See Also: System.loadLibrary(String) See Also: System.mapLibraryName(String) since: 1.2 |
findLoadedClass | final protected Class findLoadedClass(String name)(Code) | | Returns the class with the given name if this loader has been recorded
by the Java virtual machine as an initiating loader of a class with
that name. Otherwise null is returned.
Parameters: name - The class name The Class object, or null if the class hasnot been loaded since: 1.1 |
findResource | protected URL findResource(String name)(Code) | | Finds the resource with the given name. Class loader implementations
should override this method to specify where to find resources.
Parameters: name - The resource name A URL object for reading the resource, ornull if the resource could not be found since: 1.2 |
findResources | protected Enumeration findResources(String name) throws IOException(Code) | | Returns an enumeration of
java.net.URL URL objects
representing all the resources with the given name. Class loader
implementations should override this method to specify where to load
resources from.
Parameters: name - The resource name An enumeration of java.net.URL URL objects forthe resources throws: IOException - If I/O errors occur since: 1.2 |
getPackage | protected Package getPackage(String name)(Code) | | Returns a Package that has been defined by this class loader
or any of its ancestors.
Parameters: name - The package name The Package corresponding to the given name, ornull if not found since: 1.2 |
getPackages | protected Package[] getPackages()(Code) | | Returns all of the Packages defined by this class loader and
its ancestors.
The array of Package objects defined by thisClassLoader since: 1.2 |
getParent | final public ClassLoader getParent()(Code) | | Returns the parent class loader for delegation. Some implementations may
use null to represent the bootstrap class loader. This method
will return null in such implementations if this class loader's
parent is the bootstrap class loader.
If a security manager is present, and the invoker's class loader is
not null and is not an ancestor of this class loader, then this
method invokes the security manager's
SecurityManager.checkPermission(java.security.Permission)checkPermission method with a
RuntimePermission.RuntimePermission(String)RuntimePermission("getClassLoader") permission to verify
access to the parent class loader is permitted. If not, a
SecurityException will be thrown.
The parent ClassLoader throws: SecurityException - If a security manager exists and its checkPermissionmethod doesn't allow access to this class loader's parent classloader. since: 1.2 |
getResource | public URL getResource(String name)(Code) | | Finds the resource with the given name. A resource is some data
(images, audio, text, etc) that can be accessed by class code in a way
that is independent of the location of the code.
The name of a resource is a '/'-separated path name that
identifies the resource.
This method will first search the parent class loader for the
resource; if the parent is null the path of the class loader
built-in to the virtual machine is searched. That failing, this method
will invoke
ClassLoader.findResource(String) to find the resource.
Parameters: name - The resource name A URL object for reading the resource, ornull if the resource could not be found or the invokerdoesn't have adequate privileges to get the resource. since: 1.1 |
getResourceAsStream | public InputStream getResourceAsStream(String name)(Code) | | Returns an input stream for reading the specified resource.
The search order is described in the documentation for
ClassLoader.getResource(String) .
Parameters: name - The resource name An input stream for reading the resource, or nullif the resource could not be found since: 1.1 |
getResources | final public Enumeration getResources(String name) throws IOException(Code) | | Finds all the resources with the given name. A resource is some data
(images, audio, text, etc) that can be accessed by class code in a way
that is independent of the location of the code.
The name of a resource is a /-separated path name that
identifies the resource.
The search order is described in the documentation for
ClassLoader.getResource(String) .
Parameters: name - The resource name An enumeration of java.net.URL URL objects forthe resource. If no resources could be found, the enumerationwill be empty. Resources that the class loader doesn't haveaccess to will not be in the enumeration. throws: IOException - If I/O errors occur See Also: ClassLoader.findResources(String) since: 1.2 |
getSystemClassLoader | public static ClassLoader getSystemClassLoader()(Code) | | Returns the system class loader for delegation. This is the default
delegation parent for new ClassLoader instances, and is
typically the class loader used to start the application.
This method is first invoked early in the runtime's startup
sequence, at which point it creates the system class loader and sets it
as the context class loader of the invoking Thread.
The default system class loader is an implementation-dependent
instance of this class.
If the system property "java.system.class.loader" is defined
when this method is first invoked then the value of that property is
taken to be the name of a class that will be returned as the system
class loader. The class is loaded using the default system class loader
and must define a public constructor that takes a single parameter of
type ClassLoader which is used as the delegation parent. An
instance is then created using this constructor with the default system
class loader as the parameter. The resulting class loader is defined
to be the system class loader.
If a security manager is present, and the invoker's class loader is
not null and the invoker's class loader is not the same as or
an ancestor of the system class loader, then this method invokes the
security manager's
SecurityManager.checkPermission(java.security.Permission)checkPermission method with a
RuntimePermission.RuntimePermission(String)RuntimePermission("getClassLoader") permission to verify
access to the system class loader. If not, a
SecurityException will be thrown.
The system ClassLoader for delegation, ornull if none throws: SecurityException - If a security manager exists and its checkPermissionmethod doesn't allow access to the system class loader. throws: IllegalStateException - If invoked recursively during the construction of the classloader specified by the "java.system.class.loader"property. throws: Error - If the system property "java.system.class.loader"is defined but the named class could not be loaded, theprovider class does not define the required constructor, or anexception is thrown by that constructor when it is invoked. Theunderlying cause of the error can be retrieved via theThrowable.getCause method. |
getSystemResource | public static URL getSystemResource(String name)(Code) | | Find a resource of the specified name from the search path used to load
classes. This method locates the resource through the system class
loader (see
ClassLoader.getSystemClassLoader() ).
Parameters: name - The resource name A java.net.URL URL object for reading theresource, or null if the resource could not be found since: 1.1 |
getSystemResourceAsStream | public static InputStream getSystemResourceAsStream(String name)(Code) | | Open for reading, a resource of the specified name from the search path
used to load classes. This method locates the resource through the
system class loader (see
ClassLoader.getSystemClassLoader() ).
Parameters: name - The resource name An input stream for reading the resource, or nullif the resource could not be found since: 1.1 |
loadLibrary | static void loadLibrary(Class fromClass, String name, boolean isAbsolute)(Code) | | |
setClassAssertionStatus | public synchronized void setClassAssertionStatus(String className, boolean enabled)(Code) | | Sets the desired assertion status for the named top-level class in this
class loader and any nested classes contained therein. This setting
takes precedence over the class loader's default assertion status, and
over any applicable per-package default. This method has no effect if
the named class has already been initialized. (Once a class is
initialized, its assertion status cannot change.)
If the named class is not a top-level class, this invocation will
have no effect on the actual assertion status of any class, and its
return value is undefined.
Parameters: className - The fully qualified class name of the top-level class whoseassertion status is to be set. Parameters: enabled - true if the named class is to have assertionsenabled when (and if) it is initialized, false if theclass is to have assertions disabled. since: 1.4 |
setDefaultAssertionStatus | public synchronized void setDefaultAssertionStatus(boolean enabled)(Code) | | Sets the default assertion status for this class loader. This setting
determines whether classes loaded by this class loader and initialized
in the future will have assertions enabled or disabled by default.
This setting may be overridden on a per-package or per-class basis by
invoking
ClassLoader.setPackageAssertionStatus(String,boolean) or
ClassLoader.setClassAssertionStatus(String,boolean) .
Parameters: enabled - true if classes loaded by this class loader willhenceforth have assertions enabled by default, falseif they will have assertions disabled by default. since: 1.4 |
setPackageAssertionStatus | public synchronized void setPackageAssertionStatus(String packageName, boolean enabled)(Code) | | Sets the package default assertion status for the named package. The
package default assertion status determines the assertion status for
classes initialized in the future that belong to the named package or
any of its "subpackages".
A subpackage of a package named p is any package whose name begins
with "p.". For example, javax.swing.text is a
subpackage of javax.swing, and both java.util and
java.lang.reflect are subpackages of java.
In the event that multiple package defaults apply to a given class,
the package default pertaining to the most specific package takes
precedence over the others. For example, if javax.lang and
javax.lang.reflect both have package defaults associated with
them, the latter package default applies to classes in
javax.lang.reflect.
Package defaults take precedence over the class loader's default
assertion status, and may be overridden on a per-class basis by invoking
ClassLoader.setClassAssertionStatus(String,boolean) .
Parameters: packageName - The name of the package whose package default assertion statusis to be set. A null value indicates the unnamedpackage that is "current" (Java LanguageSpecification, section 7.4.2). Parameters: enabled - true if classes loaded by this classloader andbelonging to the named package or any of its subpackages willhave assertions enabled by default, false if they willhave assertions disabled by default. since: 1.4 |
setSigners | final protected void setSigners(Class c, Object[] signers)(Code) | | Sets the signers of a class. This should be invoked after defining a
class.
Parameters: c - The Class object Parameters: signers - The signers for the class since: 1.1 |
|
|