有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在阅读Java中的类加载

动机

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

 Bootstrap
     |
   System
     |
   Common
   /    \
First Second

我还知道类加载器会检查它的父类加载器是否可以加载该类,如果是这样的话,会将加载委托给它的父类

问题:

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


共 (3) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

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

  3. # 3 楼答案

    类加载器检查^{}路径变量中的所有类(java类文件)。如果你的类在那里,它就存在,否则就不存在

    所以实际上,你的/src目录和所有子目录(=包)都会被扫描