前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >静态代码块、非静态代码块、构造函数三者执行顺序

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

作者头像
HaC
发布2020-12-30 17:23:52
4780
发布2020-12-30 17:23:52
举报
文章被收录于专栏:HaC的技术专栏

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

首先:

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

再者是执行顺序:

/* * *(1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。 * *(2)子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。 * *(3)父类实例成员和实例初始化块,按在代码中出现的顺序依次执行。 * *(4)执行父类构造方法。 * *(5)子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。 * *(6)执行子类构造方法。 * */

代码语言:javascript
复制
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

再来看看这个代码,代码位置调换一下顺序

代码语言:javascript
复制
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.在创建一个对象的时候会执行非静态代码块和构造函数。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/09/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先:
  • 再者是执行顺序:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档