类加载三种方式
- 命令行启动应用时,jvm初始化加载
- Class.forName()
- ClassLoader.loadClass()动态加载
Class.forName()和ClassLoader.loadClass()区别
Class.forName():将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块;
ClassLoader.loadClass():只干一件事情,就是将.class文件加载到jvm
package loader;
/*
* created by sj 2019年8月23日
*/
public class LoaderTest {
public static void main(String[] args) throws ClassNotFoundException {
ClassLoader loader = Hello.class.getClassLoader();
try {
Class<?> loadClass = loader.loadClass("loader.Test1");
System.out.println(loadClass);
Class<?> forNameClass = Class.forName("loader.Test1");
System.out.println(forNameClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
package loader;
/*
* created by sj 2019年8月23日
*/
public class Test1 {
static {
System.out.println("代码块被执行");
}
}