我正在学习Java中的类加载。
动机
假设我们有这样一个类加载器层次结构,我理解由First
加载的类无法直接被由Second
加载的类访问(反之亦然)。
Bootstrap
|
System
|
Common
/ \
First Second
我知道一个类加载器会向其父加载器检查是否可以加载该类,如果可以,就将加载工作委托给它的父加载器。
问题: 类加载器如何确定它们能否加载某个给定的类?
我正在学习Java中的类加载。
假设我们有这样一个类加载器层次结构,我理解由First
加载的类无法直接被由Second
加载的类访问(反之亦然)。
Bootstrap
|
System
|
Common
/ \
First Second
这取决于类加载器的实现。但是,类加载器可以加载的所有类都是通过ClassLoader.findClass(String)来检索的。
有许多实现,但最常见的是URLClassLoader,它从目录和jar文件中加载类。
CLASSPATH
路径变量中的所有类(Java类文件)。如果您的类在那里找到,它就存在,否则就不存在。
因此,实际上,您的/src
目录和所有子目录(=包)都会被扫描。