java 动态/静态语句块 类动态加载

  1. class C{  
  2.     static {     //静态语句块,在加载类的时候加载,并且只被加载一次  
  3.         System.out.println("static of CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC");  
  4.     }  
  5. }  
  6.   
  7. class D{  
  8.     public D(int i){}  
  9.       
  10.     {     //动态语句块,在每次new 对象的时候调用,用的不多。这个与构造方法区别不大,仅当构造方法有参数时,才发现,这个无条件加在每个构造方法前面  
  11.         System.out.println("dynamic of DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD");  
  12.     }  

  1. }  

类加载特性 :
      *
在虚拟机的生命周期中一个类只被加载一次。
      *
类加载的原则:延迟加载,能少加载就少加载,因为虚拟机的空间是有限的。
      *
类加载的时机:
      1)第一次创建对象要加载类.
      2)调用静态方法时要加载类,访问静态属性时会加载类。
      3)加载子类时必定会先加载父类。
      4)创建对象引用不加载类.
      5) 子类调用父类的静态方法时
          (1)当子类没有覆盖父类的静态方法时,只加载父类,不加载子类
          (2)当子类有覆盖父类的静态方法时,既加载父类,又加载子类
      6)访问静态常量,如果编译器可以计算出常量的值,则不会加载类,例如:public static final int a =123;否则会加载类,例如:public static final int a = math.PI。

Guess you like

Origin blog.csdn.net/qq_34352738/article/details/54861562
Recommended