主要探讨一下关于静态代码块,非静态代码块,构造函数的执行顺序。
如有错误,欢迎指出。
首先:
静态成员变量和静态代码块的优先级是一样的,先定义的先执行。
在创建一个对象的时候会执行非静态代码块和构造函数
再者是执行顺序:
/*
*
*(1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
*
*(2)子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
*
*(3)父类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
*
*(4)执行父类构造方法。
*
*(5)子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
*
*(6)执行子类构造方法。
*
*/
public class StaticTest {public static StaticTest t1=new StaticTest(); //静态成员变量,第一步执行public static void main(String args[]) {StaticTest t2=new StaticTest(); //第三步执行}//静态代码块static{System.out.println("B");//第二步执行}//非静态代码块{System.out.println("A"); }}
输出:
A
B
A
再来看看这个代码,代码位置调换一下顺序
public class StaticTest {public static void main(String args[]) {StaticTest t2=new StaticTest(); //第三步执行}//静态代码块static{System.out.println("B");//变成第一步执行}public static StaticTest t1=new StaticTest(); //静态成员变量,变成第二步执行//非静态代码块{System.out.println("A"); }}
输出:
B
A
A
所以验证:
1.静态成员变量和静态代码块的优先级是一样的,先定义的先执行。
2.在创建一个对象的时候会执行非静态代码块和构造函数。