前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java的,与类的初始化顺序

Java的,与类的初始化顺序

作者头像
allsmallpig
发布2021-02-25 15:14:45
3140
发布2021-02-25 15:14:45
举报
文章被收录于专栏:allsmallpi博客

转载自 https://blog.csdn.net/sujz12345/article/details/52590095

与 Java在编译之后会在字节码文件中生成方法,称之为实例构造器,该实例构造器会将语句块,变量初始化,调用父类的构造器等操作收敛到方法中,收敛顺序(这里只讨论非静态变量和语句块)为:  1. 父类变量初始化  2. 父类语句块  3. 父类构造函数  4. 子类变量初始化  5. 子类语句块  6. 子类构造函数

所谓收敛到方法中的意思就是,将这些操作放入到中去执行

Java在编译之后会在字节码文件中生成方法,称之为类构造器,类构造器同实例构造器一样,也会将静态语句块,静态变量初始化,收敛到方法中,收敛顺序为:  1. 父类静态变量初始化  2. 父类静态语句块  3. 子类静态变量初始化  4. 子类静态语句块

方法是在类加载过程中执行的,而是在对象实例化执行的,所以一定比先执行。所以整个顺序就是:  1. 父类静态变量初始化  2. 父类静态语句块  3. 子类静态变量初始化  4. 子类静态语句块  5. 父类变量初始化  6. 父类语句块  7. 父类构造函数  8. 子类变量初始化  9. 子类语句块  10. 子类构造函数

初始化顺序 如下父类代码

代码语言:javascript
复制
public class Parent {
    static int a = 1;
    int b = 1;
    static {
        System.out.println("parent static block(a):" + (++a));
    }
    {
        System.out.println("parent  block(b):" + (++b));
    }
    public Parent() {
        System.out.println("parent construction");
    }
}

子类代码

代码语言:javascript
复制
public class Child extends Parent {
    static int a = 1;
    int b = 1;
    static {
        System.out.println("child static block(a):" + (++a));
    }
    {
        System.out.println("child  block(b):" + (++b));
    }
    public Child() {
        System.out.println("child construction");
    }
    public static void main(String[] args) {
        new Child();
    }
}

最终输出结果为

代码语言:javascript
复制
parent static block(a):2
child static block(a):2
parent  block(b):2
parent construction
child  block(b):2
child construction
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档