- class C{
- static { //静态语句块,在加载类的时候加载,并且只被加载一次
- System.out.println("static of CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC");
- }
- }
- class D{
- public D(int i){}
- { //动态语句块,在每次new 对象的时候调用,用的不多。这个与构造方法区别不大,仅当构造方法有参数时,才发现,这个无条件加在每个构造方法前面
- System.out.println("dynamic of DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD");
- }
- }
-
类加载特性 :
*在虚拟机的生命周期中一个类只被加载一次。
*类加载的原则:延迟加载,能少加载就少加载,因为虚拟机的空间是有限的。
*类加载的时机:
1)第一次创建对象要加载类.
2)调用静态方法时要加载类,访问静态属性时会加载类。
3)加载子类时必定会先加载父类。
4)创建对象引用不加载类.
5) 子类调用父类的静态方法时
(1)当子类没有覆盖父类的静态方法时,只加载父类,不加载子类
(2)当子类有覆盖父类的静态方法时,既加载父类,又加载子类
6)访问静态常量,如果编译器可以计算出常量的值,则不会加载类,例如:public static final int a =123;否则会加载类,例如:public static final int a = math.PI。