| 关于静态的初始化题 public class StaticDemo {
 public static void main(String[] args) {
 
 Demo1 d = Demo1.getInstance();
 System.out.println(d.count1+"......."+d.count2);
 }
 
 }
 class Demo1{
 private Demo1(){
 System.out.println(count1+"...构造函数前..."+count2);
 count1++;
 count2++;
 System.out.println(count1+"...构造函数后..."+count2);
 }
 public static int count1;
 public static int count2=2;
 static{
 System.out.println(count1+"...静态代码块前..."+count2);
 count1++;
 count2++;
 System.out.println(count1+"...静态代码块后..."+count2);
 }
 private static Demo1 d = new Demo1();
 
 public static Demo1 getInstance(){
 return d;
 }
 }
 一个类中包含静态成员变量,静态代码块等,会在类加载时,根据这些静态变量和代码的在源码中的顺序执行.
 本题中就是这样的,类加载时,1,先执行两成员变量的默认和显示初始化.2,执行静态代码块,在执行静态类对象的
 创建,此时调用构造函数进行初始化.
 所以结果是:
 0...静态代码块前...2
 1...静态代码块后...3
 1...构造函数前...3
 2...构造函数后...4
 2.......4
 若把对象的创建放在成员变量初始化之前,结果就有不一样.1,先是默认初始化,再执行构造代码块,2然后才是显示初始化.
 3,最后才是静态代码块.
 执行结果:
 0...构造函数前...0
 1...构造函数后...1
 1...静态代码块前...2
 2...静态代码块后...3
 2.......3
 
 
 |