The Class Loader and Namespaces
Class loaders are used by the Java
virtual machine to enforce certain rules
about the namespaces used by Java
classes. Recall that the
full name of a Java class is qualified
by the name of the package to which the class belongs; there is no
standard class called String
in the Java API,
but there is the class java.lang.String
. On the
other hand, a class does not need to belong to a package, in which
case its full name is just the name of the class. It’s often
said that these classes are in the default package, but that’s
slightly misleading: as it turns out, there is a different default
package for each class loader in use by the virtual machine.
Consider what happens if you surf to a page at
www.sun.com and load an applet that uses a class
called Car
(with no package name); after that,
you surf to a page at www.ora.com and load a
different applet that uses a class called Car
(also with no package name). Clearly, these are two different
classes, but they have the same fully qualified name -- how can
the virtual machine distinguish between these two classes?
The answer to that question lies in the internal workings of the
class loader. When a class is loaded by a class loader, it is stored
in a reference internal to that class loader. A class loader in Java
is simply an object whose type extends the
ClassLoader
class. When the virtual machine needs access to a particular class, it asks the appropriate class loader. For example, when the virtual machine ...
Get Java Security, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.