Java 静态初始化行为

2022-09-04 07:37:44
public class Hello {
        public static final Hello h = new Hello();
        static int i = 5;
        int j  = i;

        private void print() {
            System.out.println(i+" , "+j);

        }
        public static void main(String[] args) {

            h.print();
        }

    }

此代码输出为 5 , 0。如果原因是类中第一个静态负载,i被初始化,j不是。但是如果我从i中删除静态,我也

public class Hello {
        public static final Hello h = new Hello();
        int i = 5;
        int j  = i;

        private void print() {
            System.out.println(i+" , "+j);

        }
        public static void main(String[] args) {

            h.print();
        }

    }

现在为什么输出是5,5。然后当 i 和 j 被初始化时。请解释原因。


答案 1

静态块按顺序执行。

首先创建一个 Hello 对象,此时尚未设置该对象。i = 0

只有在此之后i = 5

您必须从上到下阅读静态语句。


答案 2

非静态变量,并在创建对象的那一刻初始化:ijHello

public static final Hello h = new Hello();

对于问题的第一部分,彼得给了你一个答案。让我补充一下。如果更改了静态变量的顺序:

static int i = 5;
public static final Hello h = new Hello();
int j  = i;

它会打印而不是。5, 55, 0


推荐