原文网址:Java反射系列--通过反射实例化对象_IT利刃出鞘的博客-CSDN博客
简介
本文用示例介绍Java通过反射来实例化对象的方法。
Class.forName和ClassLoader的区别
关系
Class.forName()方法也是调用的 ClassLoader 来实现的。
区别
项 | Class.forName | ClassLoader |
灵活度 | 灵活度低。 例如:加载的类只能是classpath下的 | 灵活度高。 例如:可以自己编写加载类的方法:比如通过读取类文件的二进制数据,这个时候文件可以不存在ClassPath中。 |
是否进行初始化 | 是。 forName方法最后调用 forName0(本地方法),第二个参数设置为了 true,代表对加载的类进行初始化(执行静态代码块、对静态变量赋值) | 否。 |
forName
@CallerSensitive
public static Class<?> forName(String className)
throws ClassNotFoundException {
Class<?> caller = Reflection.getCallerClass();
return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
}
它有个重载(可以手动选择在加载类时是否要对其类进行初始化。)
public static Class<?> forName(String name, boolean initialize,
ClassLoader loader){}
实例(forName)
上边是文章的部分内容,为便于维护,全文已迁移到此网址:Java-通过反射实例化对象 - 自学精灵