定义一个类,往往会直接赋值,或者用代码块(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);
}
}
经过网上查阅资料,以及我自己做实验,可以得到结论执行顺序结论:
其中,静态域分为static代码块和static属性定义时赋值,这两个赋值,值取在下面,也即是行号大的(也可以说静态域是顺序执行,最后执行的肯定就把之前执行的覆盖咯)
普通域,也分为{}代码块和属性定义时赋值,和静态域的执行流程一样
最后,需要注意static属性是类加载时赋值的,而普通字段是new对象执行的,static属性和static {} 只在类第一次加载时执行,普通域每次new对象时都执行
原文:https://www.cnblogs.com/zjytrhy/p/15027449.html