【发布时间】:2015-05-30 13:24:09
【问题描述】:
假设我在 java 中动态加载类 A。A 类同时使用 java 标准库类和
用户定义的类。
我想知道必须加载A 使用的所有类的类加载器是什么?
谢谢
【问题讨论】:
标签: java class jvm classloader
假设我在 java 中动态加载类 A。A 类同时使用 java 标准库类和
用户定义的类。
我想知道必须加载A 使用的所有类的类加载器是什么?
谢谢
【问题讨论】:
标签: java class jvm classloader
这取决于你设计加载类A的类加载器的方式
首先,类加载器之间会有层次关系。
标准 Java 机制(父级优先):
通常当你必须加载一个类时,默认情况下,它遵循这种模式:
特殊情况(儿童优先):
在这种情况下,子类加载器(也就是你的类加载器可以尝试加载该类),如果这个类加载器无法加载所需的类,那么它可以请求父类加载该类。如果父级无法加载该类,则会引发 ClassNotFoundException
在任何情况下,java核心类都应该由父类加载器加载。
但是理论上,只要您可以访问包含这些类的 jar,您就可以始终让您的自定义类加载器加载这些类
【讨论】: