Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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_Classloader - Fatal编程技术网

java中的系统类加载器如何有用?

java中的系统类加载器如何有用?,java,classloader,Java,Classloader,我希望系统类加载器接管我的应用程序的类加载。所以,如果我以 java -Djava.system.class.loader=MyClassLoader Main 我希望Main由MyClassLoader加载,这样我就可以控制应用程序中的类加载。但事实并非如此。Main仍然由默认的系统类加载器(sun.misc.Launcher$AppClassLoader)加载,从Main引用的其他类也是如此。但是,对getSystemClassLoader()的调用将返回MyClassLoader的实例

我希望系统类加载器接管我的应用程序的类加载。所以,如果我以

java -Djava.system.class.loader=MyClassLoader Main
我希望Main由MyClassLoader加载,这样我就可以控制应用程序中的类加载。但事实并非如此。Main仍然由默认的系统类加载器(sun.misc.Launcher$AppClassLoader)加载,从Main引用的其他类也是如此。但是,对getSystemClassLoader()的调用将返回MyClassLoader的实例


这有什么用?由我的自定义系统类加载器加载Main难道没有意义吗?如何控制应用程序的类加载?谁使用getSystemClassLoader()值?

如果您只是子类化了
URLClassLoader
,而没有覆盖:

在父类加载器中首次搜索后,将按照为类和资源指定的顺序搜索URL


如果父类加载器可以加载该类,则它会加载该类,并且为该类报告的加载器将是父类加载器。为了还原Java类加载器默认的父类第一加载策略,如果您只是子类化了
URLClassLoader
,而没有重写,则必须重写
loadClass

在父类加载器中首次搜索后,将按照为类和资源指定的顺序搜索URL


如果父类加载器可以加载该类,则它会加载该类,并且为该类报告的加载器将是父类加载器。为了恢复Java类加载器默认的父类优先加载策略,您必须覆盖
loadClass

必须加载类加载器的某些内容。。。。这就是系统类加载器(它神奇地位于JVM中),您是如何实现类加载器的?你可能会委托给家长吗?好的,你不是从头开始写的,但它仍然是你的类。你必须首先反驳这个假设:你的类加载器正在被调用,但它委托给父类加载器。你能提供一个最小的工作示例吗?请发布你的类加载器的代码。有些东西必须加载你的类加载器。。。。这就是系统类加载器(它神奇地位于JVM中),您是如何实现类加载器的?你可能会委托给家长吗?好的,你不是从头开始写的,但它仍然是你的类。您必须首先反驳这个假设:您的类加载器正在被调用,但它委托给父类加载器。您是否可以提供一个最小的工作示例?请发布您的类加载器的代码