java类加载器如何确定可以加载哪些类?
我正在阅读Java中的类加载
动机
假设我们有这样一个类加载器层次结构,我理解First
加载的类不能直接被Second
加载的类访问(反之亦然)
Bootstrap
|
System
|
Common
/ \
First Second
我还知道类加载器会检查它的父类加载器是否可以加载该类,如果是这样的话,会将加载委托给它的父类
问题:
类加载器实际上如何确定它们是否可以加载某个给定的类
你可以在下面搜索框中键入要查询的问题!
我正在阅读Java中的类加载
假设我们有这样一个类加载器层次结构,我理解First
加载的类不能直接被Second
加载的类访问(反之亦然)
Bootstrap
|
System
|
Common
/ \
First Second
我还知道类加载器会检查它的父类加载器是否可以加载该类,如果是这样的话,会将加载委托给它的父类
类加载器实际上如何确定它们是否可以加载某个给定的类
# 1 楼答案
这取决于类加载器的实现。但是类加载器可以加载的所有类都由ClassLoader.findClass(String)检索
有很多实现,但最常见的是URLClassLoader,它从目录和jar文件加载类
# 2 楼答案
类加载器将请求的类名转换为文件名,然后尝试从文件系统中查找该名称的“类文件”。正如@poitroae所指出的,它使用CLASSPATH变量(如果设置)作为起点。大多数IDE和类似的工具都会将其扩展为包含项目的工作目录
# 3 楼答案
类加载器检查^{} 路径变量中的所有类(java类文件)。如果你的类在那里,它就存在,否则就不存在
所以实际上,你的
/src
目录和所有子目录(=包)都会被扫描