关于静态变量,静态代码块,实例变量,实例代码块,构造函数的执行顺序的总结

时间:2021-09-23 19:29:39

 大体上顺序是这样的:(也可以说是优先级,同一级的按顺序执行)

1 静态变量,静态代码块

2 实例变量,实例代码块

3 构造函数

 

public class Test{
	public Test(){
		System.out.println("构造方法被执行 5");            
	}
		
	{
		System.out.println("实例代码块被执行 3");          //实例代码块
	}
		
	private TestInstance ti = new TestInstance();          //实例变量
		
	private static TestInstance ti1 = new TestInstance(1); //静态变量
		
	static{
	  	System.out.println("静态代码块被执行 2");          //静态代码块
	}
	  
	public static void main(String[] args){
	  	new Test();
	}
	  
}

class TestInstance{
	public TestInstance(){
		System.out.println("实例变量被构造 4");
	}

	public TestInstance(int i){
		System.out.println("静态变量被构造 1");
	}
}

 

执行顺序是: 1 2 3 4 5

另外有一点还要特别注意:在执行构造函数时,实例变量和实例代码块 会先被执行。 


在附上一个把我引到这个问题的例子:

package com.wind.jdbc;

public class TestStaticCode {
    private static TestStaticCode tsc = new TestStaticCode();
    static{
        System.out.println("4");
    }
    private InstanceVariable iv = new InstanceVariable();
    
    private TestStaticCode(){
        System.out.println("3");
    }

    public static void main(String[] args){    
    }
}


package com.wind.jdbc;

public class InstanceVariable {
    static{
        System.out.println("1");
    }
    public InstanceVariable(){
        System.out.println("2");
    }
}
正确顺序应该是: 1  2  3  4