[英]How Classloader determines which classes it can load?
我正在阅读Java中的类加载。
假设我们有一个看起来像这样的类加载器层次结构,我理解First
加载的类不能由Second
加载的类直接访问(反之亦然)。
Bootstrap
|
System
|
Common
/ \
First Second
我也理解一个类加载器检查它的父类加载器是否可以加载该类,如果是这种情况,则将加载委托给它的父类。
类加载器如何确定它们是否可以加载某个给定的类?
这取决于类加载器的实现。 但ClassLoader.findClass(String)检索ClassLoader可以加载的所有类
有许多实现,但最常见的是URLClassLoader ,它从目录和jar文件加载类。
类加载器检查CLASSPATH
路径变量中的所有类(java类文件) 。 如果你的班级在那里找到,它就存在,否则就不存在。
实际上, 您的/src
目录和所有子目录(=包)都会被扫描。
类加载器将请求的类名转换为文件名,然后尝试从文件系统中查找该名称的“类文件”。 正如@poitroae所说,它使用CLASSPATH变量(如果设置)作为起始位置。 大多数IDE等都将此扩展为包含项目的工作目录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.