是否可以创建一个空的ClassLoader?

时间:2013-12-26 11:29:45

标签: java reflection

我想创建一个新的ClassLoader实例,它在开头时绝对不包含任何类。它不应该有一个类可用。甚至不是java.lang类。我希望能够为我自己的位置手动加载每个类。 (使用重写的defineClass方法)

问题在于我对此所做的每一次尝试都失败了。任何新建的ClassLoader都包含CLASSPATH变量中的所有类。

现在是我的问题:
是否可以创建一个空的ClassLoader? (没有类 - 特别是来自CLASSPATH - 应该加载)

提前致谢, 丹尼斯

1 个答案:

答案 0 :(得分:4)

我认为这是不可能的。

定义类加载器(自己创建)时,需要定义它的父类加载器。 如果您没有定义一个,则默认为bootstrap类加载器。

父类加载器的需求是一个安全问题。 java.lang 来自 bootstrap 类加载器。


来自http://en.wikipedia.org/wiki/Java_Classloader的更深入的解释:

  

每个Java类必须由类加载器加载。[2]此外,Java   程序可以使用外部库(即库)   由程序作者以外的人编写和提供)   或者它们可能至少部分由许多图书馆组成。

     

启动JVM时,使用三个类加载器:[3] [4]

     

Bootstrap类加载器

     

扩展类加载器

     

系统类加载器

     

引导类加载器加载位于中的核心Java库[5]   / jre / lib目录。这个类加载器,是其中的一部分   核心JVM,用本机代码编写。

     

扩展类加载器加载扩展中的代码   目录(/ jre / lib / ext,[6]或任何其他目录   由java.ext.dirs系统属性指定)。它由实现   sun.misc.Launcher $ ExtClassLoader类。

     

系统类加载器加载在java.class.path上找到的代码   映射到CLASSPATH环境变量。这是由实现的   sun.misc.Launcher $ AppClassLoader class。