Java 可以创建一个空的类加载器吗?
我想创建一个新的ClassLoader实例,它在开始时绝对不包含任何类。它不应该只有一个类可用。甚至java.lang类也没有。我希望能够为我自己的位置手动加载每个类。(使用重写的defineClass方法) 问题是我的每一次尝试都失败了。任何新生成的类加载器都包含CLASSPATH变量中的所有类 现在是我的问题:Java 可以创建一个空的类加载器吗?,java,reflection,Java,Reflection,我想创建一个新的ClassLoader实例,它在开始时绝对不包含任何类。它不应该只有一个类可用。甚至java.lang类也没有。我希望能够为我自己的位置手动加载每个类。(使用重写的defineClass方法) 问题是我的每一次尝试都失败了。任何新生成的类加载器都包含CLASSPATH变量中的所有类 现在是我的问题: 可以创建一个空的类加载器吗?(不应加载任何类,尤其是来自类路径的类) 提前感谢,, 丹尼斯我认为这是不可能的 定义类加载器(自己创建)时,需要定义它的父类加载器。 当您没有定义一个类
可以创建一个空的类加载器吗?(不应加载任何类,尤其是来自类路径的类) 提前感谢,,
丹尼斯我认为这是不可能的 定义类加载器(自己创建)时,需要定义它的父类加载器。 当您没有定义一个类加载器时,引导类加载器是默认的 父类加载器的需要是一个安全问题java.lang类来自引导程序类加载器
以下是一个更深刻的解释: 每个Java类都必须由类加载器加载。[2]此外,Java 程序可以使用外部库(即库 (由程序作者以外的人编写和提供) 或者,它们可能至少部分由多个库组成 启动JVM时,使用三个类装入器:[3][4] 引导类装入器 扩展类加载器 系统类加载器 引导类加载器加载位于 /jre/lib目录。这个类加载器是 核心JVM是用本机代码编写的 扩展类加载器加载扩展中的代码 目录(/jre/lib/ext,[6]或任何其他目录 由java.ext.dirs系统属性指定)。它是由 sun.misc.Launcher$ExtClassLoader类 系统类加载器加载java.class.path上的代码,其中 映射到CLASSPATH环境变量。这是由 sun.misc.Launcher$AppClassLoader类
我认为这是不可能的 定义类加载器(自己创建)时,需要定义它的父类加载器。 当您没有定义一个类加载器时,引导类加载器是默认的 父类加载器的需要是一个安全问题java.lang类来自引导程序类加载器
以下是一个更深刻的解释: 每个Java类都必须由类加载器加载。[2]此外,Java 程序可以使用外部库(即库 (由程序作者以外的人编写和提供) 或者,它们可能至少部分由多个库组成 启动JVM时,使用三个类装入器:[3][4] 引导类装入器 扩展类加载器 系统类加载器 引导类加载器加载位于 /jre/lib目录。这个类加载器是 核心JVM是用本机代码编写的 扩展类加载器加载扩展中的代码 目录(/jre/lib/ext,[6]或任何其他目录 由java.ext.dirs系统属性指定)。它是由 sun.misc.Launcher$ExtClassLoader类 系统类加载器加载java.class.path上的代码,其中 映射到CLASSPATH环境变量。这是由 sun.misc.Launcher$AppClassLoader类
+1您需要像Object、String等标准类。没有这些类,您的类加载器无法运行。我已经在研究sun.misc.Launcher$ExtClassLoader。它似乎是URLClassLoader调用其构造函数的实例:
super(getExtURLs(dirs),null,factory)代码>其中“null”是父类加载器。看来我只能更换扩展类加载器了。看起来确实没有办法取代引导类加载器。正确@Dennis。当您使用“null”时,它将获得默认值,即引导类加载器。这个类加载器加载所有java.lang类。+1您需要对象、字符串等标准类。没有这些类,您的类加载器无法运行。我已经在研究sun.misc.Launcher$ExtClassLoader。它似乎是URLClassLoader调用其构造函数的实例:super(getExtURLs(dirs),null,factory)代码>其中“null”是父类加载器。看来我只能更换扩展类加载器了。看起来确实没有办法取代引导类加载器。正确@Dennis。当您使用“null”时,它将获得默认值,即引导类加载器。这个类加载器加载所有java.lang类。