繁体   English   中英

Classloader如何确定它可以加载哪些类?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM