java类加载
类加载时要调用初始化代码,何为初始化代码?其实就是类文件中写的static代码块,如下:
1 public class Car { 2 // 静态代码块,就是初始化代码 3 static { 4 System.out.println("买一辆车"); 5 } 6 7 public void drive() { 8 System.out.println("去感受驾驶的乐趣..."); 9 } 10 }
1 public class MyClassLoader { 2 3 public static void main(String [] args) { 4 System.out.println("准备。。。"); 5 Car car = new Car(); 6 car.drive(); 7 } 8 }
执行结果如下:
准备。。。
买一辆车
去感受驾驶的乐趣...
-------------------------
如果通过debug的方式执行,上面MyClassLoader方法中,第4行开始执行,到第五行执行结束
通过jvisualvm查看类加载数量,可以发现增加了1个
执行到第四行的状态,注意观察“已装入的总数”是399
执行到第五行的状态,注意观察“已装入的总数”是400
好,下面用另一种方式加载类
Class.forName("o3.Car");
得到的结果与第一种方式一样,static中的方法也会被执行
那么,如何在加载类时,不执行static方法呢?
Class.forName("o3.Car", false, ClassLoader.getSystemClassLoader());
这样就可以了,注意第二个参数是false,加载类时不初始化类