Java的“ Class.forName”是否会扫描所有jar中的所有类名称?

时间:2018-12-01 12:57:51

标签: java class jar driver loader

在编译或运行时,我们通常具有许多类/ jar依赖项,而数据库驱动程序的jar只是其中之一。因此,

Class.forName(X)

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

1 个答案:

答案 0 :(得分:1)

它委托给调用类的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);
}