forName()和loadClass()的区别

来源:互联网 发布:淘宝店铺运营规划书 编辑:程序博客网 时间:2024/06/11 04:07

共同点:

1.两者都会将用户指定的类加载到内存中,供用户使用

不同点:

  1. Class.forName有两个重载的方法,分别是:
public static Class<?> forName(String name, boolean initialize, ClassLoader loader)public static Class<?> forName(String className)

第一个方法,可以指定要不要始化加载类的static区块和static变量,用户自己可以指定ClassLoader;

第二个方法的具体实现是:

return forName0(className, true, ClassLoader.getClassLoader(Reflection.getCallerClass()));

也就是说,如果使用第二个方法的话,默认会初始化加载类的static区块和static变量,使用的ClassLoader是当前调用者的ClassLoader;

  1. ClassLoader.loadClass()也是有两个重载方法,分别是:
public Class<?> loadClass(String name)protected Class<?> loadClass(String name, boolean resolve)

第一个方法的具体实现是:

return loadClass(name, false);

第二个参数的意思是再加载类的时候要不要resolve对应的符合,它和上面的要不要初始化不一样。

第二个方法注意是protected的,所有只能是子类来调用。

总结,他们之间的区别就在于,Class.forName方法有要不要初始static变量的参数,而ClassLoader.loadClass()没有。

0 0
原创粉丝点击