Java:静态代码块和构造函数执行顺序

/*大体上顺序是这样的:(也可以说是优先级,同一级的按顺序执行)
1 静态变量,静态代码块(类加载时执行,类不加载不执行)
2 实例变量,实例代码块(创建对象时才执行,不创建对象不执行)
3 构造函数,(创建对象时执行完2后再执行构造函数,不管构造函数是public还是private)
*/

 

1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 
2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 
3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;
4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法; 

 

public class Test{  
    public Test(){  
        System.out.println("类Test构造方法被执行 6");              
    }  
          
    {  
        System.out.println("类Test实例代码块被执行 4");          //实例代码块  
    }  
          
    private TestInstance ti = new TestInstance();          //实例变量  
          
    private static TestInstance ti1 = new TestInstance(2); //静态变量  
          
    static{  
        System.out.println("类Test静态代码块被执行 3");    //静态代码块  
    }  
        
    public static void main(String[] args){ 
        //如果不创建对象那么输出 1 2 3
        //如果创建对象,那么输出 1 2 3 4 5 6
        new Test();  
    }  
        
}  
  
class TestInstance{  
    public TestInstance(){  
        System.out.println("类TestInstance实例变量被构造 5");  
    }  
  
    static{
        System.out.println("类TestInstance加载执行静态代码块 1");
    }
    public TestInstance(int i){  
        System.out.println("类TestInstance静态变量被构造 2");  
    }  
}  

 

public class TestStaticCode {
     /*大体上顺序是这样的:(也可以说是优先级,同一级的按顺序执行)
        1 静态变量,静态代码块(类加载时执行)
        2 实例变量,实例代码块(创建对象时执行)
        3 构造函数,(创建对象时执行完2后再执行构造函数,不管构造函数是public还是private)
     */
    //测试输出:0 1 2 3 4 
    //主类加载,首先执行该句静态变量(执行完该句相关的所有语句之后才往下执行),创建对象,那么要执行实例变量、实例代码块
    //第一句静态语句执行完成之后才能执行静态代码块
    private static TestStaticCode tsc = new TestStaticCode();  
    static{  
        System.out.println("4");  
    }  
    {
        System.out.println("0"); 
    }
    private InstanceVariable iv = new InstanceVariable();  
     
    //类私有的构造函数
    private TestStaticCode(){  
        System.out.println("3");  
    }  
  
    public static void main(String[] args){      
    }  
}  

class InstanceVariable {  
    static{  
        System.out.println("1");  
    }  
    public InstanceVariable(){  
        System.out.println("2");  
    }  
}  

 

posted @ 2016-07-14 09:03  桃源仙居  阅读(358)  评论(0)    收藏  举报