forName()和loadClass()的区别

共同点:

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()没有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值