我想创建一个新的ClassLoader实例,它在开头时绝对不包含任何类。它不应该有一个类可用。甚至不是java.lang类。我希望能够为我自己的位置手动加载每个类。 (使用重写的defineClass方法)
问题在于我对此所做的每一次尝试都失败了。任何新建的ClassLoader都包含CLASSPATH变量中的所有类。
现在是我的问题:
是否可以创建一个空的ClassLoader? (没有类 - 特别是来自CLASSPATH - 应该加载)
提前致谢, 丹尼斯
答案 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。