静态代码块、非静态代码块、构造函数三者执行顺序

来源:互联网 发布:小米抢购软件有用吗 编辑:程序博客网 时间:2024/05/22 17:15

主要探讨一下关于静态代码块,非静态代码块,构造函数的执行顺序。
如有错误,欢迎指出。

首先:


静态成员变量和静态代码块的优先级是一样的,先定义的先执行。
在创建一个对象的时候会执行非静态代码块和构造函数

再者是执行顺序:

/*
*
*(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.在创建一个对象的时候会执行非静态代码块和构造函数。

阅读全文
0 0