java - Java 的 "Class.forName"是否扫描所有 jar 中的所有类名?

标签 java class jar driver loader

在编译或运行时,我们通常有很多类/jar 依赖,数据库驱动程序的jar 只是其中之一。那么,是吗

Class.forName(X)

必须扫描所有这些 .class/.jar 文件名才能找到名为 X 的正确驱动程序类?如果不是,Class.forName 是否有任何规则/算法来查找特定类?

最佳答案

它委托(delegate)给调用类的ClassLoader。在大多数情况下,答案是肯定的,但是 ClassLoader 实现具有更复杂的规则,例如OSGI which uses dynamic modulesJEE Server Application Classloading .

public static Class<?> forName(String className) throws ClassNotFoundException {
  Class<?> caller = Reflection.getCallerClass();
  return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
}

关于java - Java 的 "Class.forName"是否扫描所有 jar 中的所有类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53571007/

相关文章:

java - 具有不同树的同一个 jar 的依赖关系

java - 如何在eclipse中创建一个包含jdbc的独立jar文件?

java - 入站和出站网关 AMQP 注释

java - 为什么在 HttpServlet 中放置 response.addHeader 会导致失败

Python子类在构造函数中使用父变量

c++ - 如何使用 `constexpr`兼容实例化创建这种类型的C++模板数组集合类

ios - 将 block 存储在参数数量不断变化的变量中

java - 在三星手机中安装 j2me 应用程序

java - SetFontSize 在 JRDesignStyle 中已弃用

java - 帮助重构 : Introduce Parameter Object?