首页 > 其他 > 详细

类加载创建属性赋值顺序

时间:2021-07-18 23:20:05      阅读:23      评论:0      收藏:0      [点我收藏+]

定义一个类,往往会直接赋值,或者用代码块(static {} 和 {} )的形式,需要搞清楚赋值的顺序,才能知道字段到底对应什么值

例如有这么一个类

public class Student {

    static {
        System.out.println("static 块执行开始~~~");
    }

    static {
        phone = "51227722";
    }


    {
        name = "建宇";
        age = 18;
    }


    {
        name = "小宇";
        age = 25;
    }


    private String name = "小赵";
    private int age = 8;
    private static String phone = "0056";

    static {
        System.out.println("static 块执行中~~~");
        System.out.println(phone);
    }

    {
        System.out.println("name = " + name);
        System.out.println("age = " + age);
    }

    static {
        phone = "9759";
    }

    static {
        System.out.println("static 块执行结束~~~");
        System.out.println(phone);
    }

    {
        name = "最后赋值";
        age = -1;
    }

    {
        System.out.println("name = " + name);
        System.out.println("age = " + age);
    }
}

经过网上查阅资料,以及我自己做实验,可以得到结论执行顺序结论:

  1. 父类静态域
  2. 子类静态域
  3. 父类的普通域
  4. 父类构造函数
  5. 子类的普通域
  6. 子类的构造函数

其中,静态域分为static代码块和static属性定义时赋值,这两个赋值,值取在下面,也即是行号大的(也可以说静态域是顺序执行,最后执行的肯定就把之前执行的覆盖咯)

普通域,也分为{}代码块和属性定义时赋值,和静态域的执行流程一样

最后,需要注意static属性是类加载时赋值的,而普通字段是new对象执行的,static属性和static {} 只在类第一次加载时执行,普通域每次new对象时都执行

类加载创建属性赋值顺序

原文:https://www.cnblogs.com/zjytrhy/p/15027449.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!