java静态初始化的不同输出

问题描述 投票:0回答:1
public class DemoApplication {

    public static void main(String[] args) {
        System.out.println("count: "+A.count);
        System.out.println("count: "+A.count);
        var a1=new A();
        var a2=new A();
        System.out.println("count: "+A.count);

    }
}

1)

public class A {

    public static A inst = new A();
    public static int count;

    public A() {
        A.inst.count++;
    }
}

输出

count: 1
count: 1
count: 3

2)

public class A {

    public static A inst = new A();
    public static int count=0;
    public A() {
        A.inst.count++;
    }
}

输出

count: 0
count: 0
count: 2

差异在于

  1. 公共静态 int 计数;
  2. 公共静态int计数=0;

谁能解释一下吗?

java static initialization
1个回答
0
投票

静态初始化按顺序发生。

在第一个代码片段中,第一个操作是为静态字段创建

A
的新实例。它需要静态字段,以便初始化为默认值 0。然后构造函数将其增加到 1。

在第二个代码片段中,静态字段初始化后,值 (1) 重置回 0。

© www.soinside.com 2019 - 2024. All rights reserved.