Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可以创建一个空的类加载器吗?_Java_Reflection - Fatal编程技术网

Java 可以创建一个空的类加载器吗?

Java 可以创建一个空的类加载器吗?,java,reflection,Java,Reflection,我想创建一个新的ClassLoader实例,它在开始时绝对不包含任何类。它不应该只有一个类可用。甚至java.lang类也没有。我希望能够为我自己的位置手动加载每个类。(使用重写的defineClass方法) 问题是我的每一次尝试都失败了。任何新生成的类加载器都包含CLASSPATH变量中的所有类 现在是我的问题: 可以创建一个空的类加载器吗?(不应加载任何类,尤其是来自类路径的类) 提前感谢,, 丹尼斯我认为这是不可能的 定义类加载器(自己创建)时,需要定义它的父类加载器。 当您没有定义一个类

我想创建一个新的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类。