0x01 功能
Class.forName("xxxx")的功能: 除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块
注意: Class.forName(name, initialize, loader)第二个参数设置为false可控制不加载static块
0x02 例子
0x02.1 环境搭建
// 使用例子# 目录结构├── src│ └── main│ └── java│ └── Test│ ├── Foo.java│ ├── Test1.java│ └── Test2.java
// 文件名: Foo.javapackage Test;public class Foo {static {System.out.println("static被执行了");}}
0x02.2 例子一
// 文件名: Test1.javapackage Test1;public class Test1 {public static void main(String[] args) {try {Class.forName("Test.Foo");} catch (ClassNotFoundException e) {e.printStackTrace();}}}// 执行结果// static被执行了
0x02.3 例子二
// 文件名: Test2.javapackage Test;public class Test2 {public static void main(String[] args) {try {Class.forName("Test.Foo", false, Test.Foo.class.getClassLoader());} catch (ClassNotFoundException e) {e.printStackTrace();}}}// 执行结果// 啥也没有,因为第二个参数为false了,表示不加载static块
