Class.forName(String)和loadClass(
2018-05-03 本文已影响13人
四喜汤圆
一、简介
1.Class.forName(String className)
Java中获取一个类所对应的Class对象的方法。是Class类的静态方法
该方法实质上调用的是
/**
* name:要加载的Class名字;
initailize:是否要初始化该类(此处涉及到类的加载过程,加载、连接、初始化)
classLoader:指定的classLoader
*/
public static Class<?> forName(String name, boolean initialize,ClassLoader loader)
forName(className,true,classLoader)
。true:表示要对加载的类进行初始化操作(静态变量声明时的赋值操作+static初始化块中的代码)
2.ClassLoader.loadClass(String)
ClassLoader的实例方法。
该方法实质上调用的是
/**
* name:要加载的类的名称
* resolve:是否要进行连接
*/
protected Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException
loadClass(name,false)
,false表示:不进行连接
二、总结
执行完Class.forName(name)方法后可以保证要加载的类完成了初始化,所以若想在加载类时就执行相关的静态代码段,则选择该方法。
执行完loadClass(name)方法后并不一定保证该类被连接。
public static void main(String[] args) {
try {
//
Class c1=Class.forName("ClassLoaderTest");
//
ClassLoader c2=ClassLoader.getSystemClassLoader();
c2.loadClass("DeadLoopClass");
System.out.println("loading DeadLoopClass class!");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}