Java Programming/Reflection/Dynamic Class Loading

From Wikibooks, the open-content textbooks collection

Jump to: navigation, search
Navigate Reflection topic:

[edit] Introduction

Dynamic Class Loading allows the loading of java code that is not known about before a program starts. Many classes rely on other classes and resources such as icons which make loading a single class unfeasible. For this reason the ClassLoader (java.lang.ClassLoader) is used to manage all the inner dependencies of a collection of classes. The Java model loads classes as needed and need not know the name of all classes in a collection before any one of its classes can be loaded and run.

[edit] Simple Dynamic Class Loading

An easy way to dynamically load a Class is via the java.net.URLClassLoader class. This class can be used to load a Class or a collection of classes that are accessible via a URL. This is very similar to the -classpath parameter in the java executable. To create a URLClassLoader use the factory method (as using the constructor requires a security privilege):

URLClassLoader classLoader = URLClassLoader.newInstance(
   new URL[]{"http://example.com/javaClasses.jar"});

Unlike other dynamic class loading techniques this can be used even without security permission provided the classes come from the same web domain as the caller.

Once a ClassLoader instance is obtained a class can be loaded via the loadClass method. For example to load the class com.example.MyClass one would:

Class<?> clazz = classLoader.load("com.example.MyClass");

Executing code from a Class instance is explained in the Dynamic Invocation chapter.