类中属性加载顺序的demo
1 import lombok.extern.slf4j.Slf4j; 2 3 /** 4 * 加载顺序 5 * 静态属性--->静态代码块--->非静态属性--->构造器 6 * 静态内部类,只有调用getDate 方法时才会加载,且只加载一次。 7 * 静态属性,只加载一次,在类加载时候加载 8 */ 9 @Slf4j 10 public class LoadOrderDemos { 11 12 public static long staticParam =System.currentTimeMillis(); 13 14 public int nonStaticParam=1; 15 16 static{ 17 //date有值,说明date在静态代码块之前加载 18 log.info("---静态代码块执行完之前---staticParam---{}", staticParam); 19 log.info("---静态代码块执行完毕"); 20 } 21 22 public LoadOrderDemos(String name){ 23 //nonStaticParam 有值说明非静态属性在构造器之前加载 24 log.info("---{}---构造器执行完之前---nonStaticParam---{}",name,nonStaticParam); 25 log.info("---{}---构造器执行完成",name); 26 } 27 28 static class InnerClass{ 29 30 public static long date=System.currentTimeMillis(); 31 32 } 33 34 public long getDate(){ 35 return InnerClass.date; 36 } 37 public static void main(String[] args) { 38 39 //两个对象new 之前 静态代码块和静态属性打印,说明静态加载在前, 40 //调用getDate输出的值相同,说明静态内部类中的静态属性只加载一次,还是延迟加载 41 //打印staticParam,输出的值相同,说明静态属性只加载一次,不是延迟加载。 42 LoadOrderDemos t1=new LoadOrderDemos("t1"); 43 LoadOrderDemos t2=new LoadOrderDemos("t2"); 44 log.info("---t1---InnerClass.getDate---{}---staticParam---{}",t1.getDate(),staticParam); 45 log.info("---t2---InnerClass.getDate---{}---staticParam---{}",t2.getDate(),staticParam); 46 47 } 48 }