4

我正在阅读 Java 中的类加载。

动机

假设我们有一个看起来像这样的类加载器层次结构,我知道加载的类First不能被加载的类直接访问Second(反之亦然)。

 Bootstrap
     |
   System
     |
   Common
   /    \
First Second

我也知道类加载器会检查其父类加载器是否可以加载该类,如果是这种情况,则将加载委托给其父类。

问题

类加载器如何实际确定它们是否可以加载某个给定的类?

4

3 回答 3

5

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

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

于 2013-03-06T13:30:29.953 回答
0

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

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

于 2013-03-06T13:24:08.593 回答
0

类加载器将请求的类名转换为文件名,然后尝试从文件系统中找到该名称的“类文件”。正如@poitroae 所指出的,它使用 CLASSPATH 变量(如果已设置)作为起点。大多数 IDE 等都将其扩展为包含项目的工作目录。

于 2013-03-06T13:31:57.317 回答