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

时间:2022-10-30 19:29:43

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

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