Previous | Next | Trail Map | The Java Extension Mechanism | Creating and Using Extensions

Understanding Extension Class Loading

The extension framework makes use of the new class loading mechanism in version 1.2 of the JavaTM platform. When the runtime environment needs to load a new class, it looks for the class in the following locations, in order:
  1. bootstrap classes -- the runtime classes in rt.jar and internationalization classes in i18n.jar.
  2. installed extensions -- classes in JAR files in the lib/ext directory of the JRE.
  3. the class path -- classes on paths specified by the system property java.class.path. By default, this property's value is ".", the current directory. You can change the value by setting the CLASSPATH environment variable or by using the -classpath or -cp command-line options. These command-line options override the setting of the CLASSPATH environment variable. Note that in version 1.2 of the Java software, java.class.path no longer includes the bootstrap classes in rt.jar and i18n.jar.
  4. download extensions -- any JAR files specified in the Class-Path headers of installed-extension JAR files, JAR files on the class path, or previously loaded download-extension JAR files.

The precedence list tells you, for example, that the class path is searched only if a class to be loaded hasn't been found among the classes in rt.jar, i18n.jar or the installed extensions. You can also see that download extensions have the lowest priority. Classes in download extensions will be loaded only if the classes haven't first been found elsewhere.

Unless your software instantiates its own class loaders for special purposes, you don't really need to know much more than to keep this precedence list in mind. In particular, you should be aware of any classname conflicts that might be present. For example, if you list a class on the class path, you'll get unexpected results if the runtime environment instead loads another class of the same name that it found in an installed extension.

The 1.2 Class Loading Mechanism

Version 1.2 of the Java platform uses a new delegation model for loading classes. The basic idea is that every class loader has a "parent" class loader. When loading a class, a class loader first "delegates" the search for the class to its parent class loader before attempting to find the class itself.

Here are some highlights of the class loading API:

To see an example application that uses some of the new API as it relates to JAR files, see the JAR File Format trail in this tutorial.

Changes to the java Command

The version 1.2 platform's class loading mechanism is reflected in some changes to the java command. Here's a summary of the changes:


Previous | Next | Trail Map | The Java Extension Mechanism | Creating and Using Extensions