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

4

我正在学习Java中的类加载。

动机

假设我们有这样一个类加载器层次结构,我理解由First加载的类无法直接被由Second加载的类访问(反之亦然)。

 Bootstrap
     |
   System
     |
   Common
   /    \
First Second

我知道一个类加载器会向其父加载器检查是否可以加载该类,如果可以,就将加载工作委托给它的父加载器。
问题: 类加载器如何确定它们能否加载某个给定的类?
3个回答

5

这取决于类加载器的实现。但是,类加载器可以加载的所有类都是通过ClassLoader.findClass(String)来检索的。

有许多实现,但最常见的是URLClassLoader,它从目录和jar文件中加载类。


0
类加载器会检查CLASSPATH路径变量中的所有类(Java类文件)。如果您的类在那里找到,它就存在,否则就不存在。

因此,实际上,您的/src目录和所有子目录(=包)都会被扫描。


0
类加载器将请求的类名转换为文件名,然后尝试从文件系统中找到该名称的“类文件”。正如@poitroae所指出的那样,如果设置了CLASSPATH变量,则使用它作为起始位置。大多数IDE和类似工具都会扩展此功能,以包括项目的工作目录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接