interview
interviewduck-java-backend
在什么情况下 Java 类会被加载

面试鸭 Java 后端面试题, 在什么情况下 Java 类会被加载?

面试鸭 Java 后端面试题, 在什么情况下 Java 类会被加载?

QA

Step 1

Q:: 在什么情况下 Java 类会被加载?

A:: Java 类在以下情况下会被加载:1. 创建类的实例(通过 new 关键字或通过反射);2. 访问类的静态变量或静态方法;3. 使用类作为父类;4. JVM 启动时加载 main 方法所在的类。

Step 2

Q:: Java 类的加载过程是怎样的?

A:: Java 类加载过程包括以下步骤:1. 加载:通过类加载器读取 .class 文件;2. 连接:包括验证(确保字节码的正确性)、准备(分配静态变量内存并初始化为默认值)、解析(将符号引用替换为直接引用);3. 初始化:执行类构造器 <clinit> 方法,初始化静态变量和静态代码块。

Step 3

Q:: 什么是类加载器(ClassLoader)?

A:: 类加载器是 Java 虚拟机的一部分,用于将 .class 文件加载到 JVM 中。常见的类加载器有 Bootstrap ClassLoader、Extension ClassLoader 和 Application ClassLoader。

Step 4

Q:: 双亲委派模型(Parent Delegation Model)是什么?

A:: 双亲委派模型是一种类加载机制,类加载器在加载类时,先委托父类加载器加载,只有当父类加载器无法加载时,才尝试自己加载。这种机制可以避免重复加载,确保核心类库不被自定义类覆盖。

Step 5

Q:: 如何自定义类加载器?

A:: 自定义类加载器需要继承 java.lang.ClassLoader 类,并重写 findClass 方法。在 findClass 方法中,可以定义自己的类加载逻辑,例如从网络或数据库中加载类。

用途

面试这些内容是为了考察候选人对 Java 类加载机制的理解,这是 Java 程序运行的基础。理解类加载机制有助于解决类加载冲突、内存泄漏等问题。在实际生产环境中,动态加载类(如插件系统)、自定义类加载器(如热部署)等场景都需要深入理解类加载机制。\n

相关问题

🦆
什么是类的加载,链接和初始化?

类的加载是将类的字节码读入 JVM 并创建 Class 对象;链接包括验证、准备和解析;初始化是执行静态初始化器和静态初始化块的过程。

🦆
类加载器的分类及各自的作用是什么?

Java 中有三种主要的类加载器:1. Bootstrap ClassLoader,加载核心类库;2. Extension ClassLoader,加载扩展类库;3. Application ClassLoader,加载应用程序类路径上的类。

🦆
类加载器之间的关系是什么?

类加载器之间通常采用双亲委派模型,父类加载器负责加载其自身和子类加载器范围内的类,子类加载器只能加载自己范围内的类。当子类加载器接收到类加载请求时,会先委托父类加载器加载,只有当父类加载器无法加载时,才自己加载。

🦆
什么是线程上下文类加载器?

线程上下文类加载器是每个线程关联的类加载器,用于在特定线程上下文中加载类,通常用于解决父类加载器无法访问子类加载器加载的类的问题。例如,JNDI、JDBC 等服务提供者接口(SPI)需要线程上下文类加载器来加载实现类。

🦆
如何解决类加载冲突?

类加载冲突可以通过以下方法解决:1. 确保类路径中没有重复的类文件;2. 使用不同的类加载器加载冲突的类;3. 调整类加载器的委派关系;4. 使用 OSGi 等模块化框架管理类加载。