Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

Class.forName() 做什么?是否会初始化类?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

Class.forName 根据类名获取对应的 Class 对象。常用的单参数重载会尝试加载并初始化该类;带 initialize 参数的重载可以选择暂不初始化。它返回的是类型的描述对象,不等于创建了这个类的普通实例。

讲清原理

加载、连接、初始化是不同的事情。初始化会执行类初始化逻辑,例如静态字段初始化器和静态代码块。使用 Class.forName(name, false, loader) 可以表达“不因这次查找要求初始化”,但仍可能发生必要的加载与连接。

同一个类名在不同定义类加载器中可能代表不同类型,因此 name 与 loader 都有意义。历史上,JDBC 常靠 Class.forName 触发驱动注册;现代驱动通常支持服务发现,不能把手动加载驱动说成所有项目必写的一步。

加载、连接、初始化是不同阶段,主动使用可能触发初始化
加载、连接、初始化是不同阶段,主动使用可能触发初始化

例子与易错点

Class<?> type = Class.forName("java.lang.String");
System.out.println(type == String.class); // true

这不会创建一个字符串实例。找不到类可能抛 ClassNotFoundException;链接或初始化失败还可能产生其他异常或错误,不能只用“类名写错”解释所有失败。

相关题:第 36 题、第 69 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。