Java中static字段赋值顺序的问题

Posted 记录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中static字段赋值顺序的问题相关的知识,希望对你有一定的参考价值。

看两个例子

public class Client {
    public static int i = 2;
    static {
        i = 100;
    }
    public static void main(String[] args) {
        System.out.println("i=" + i);
    }
}
i=100
public class Client {
    static {
        i = 100;
    }
    public static int i = 2;
    public static void main(String[] args) {
        System.out.println("i=" + i);
    }
}
i=2

结论:静态变量是在类初始化时首先被加载的,JVM会去查找类中所有的静态声明,然后分配空间,注意这时候只是完成了地址空间的分配,还没有赋值,之后JVM会根据类中静态赋值语句(包括静态类赋值和静态块赋值)的先后顺序来执行

以上是关于Java中static字段赋值顺序的问题的主要内容,如果未能解决你的问题,请参考以下文章

浅谈java类中成员的初始化顺序

类的初始化

静态代码块非静态代码块(普通代码块)和构造方法的执行顺序

天了噜!定义static字段还有顺序要求?

java后台面试题整理及解答JVM相关篇

JAVA程序执行顺序