gpt4 book ai didi

java - static 修饰符如何影响这段代码?

转载 作者:IT老高 更新时间:2023-10-28 11:20:52 25 4
gpt4 key购买 nike

这是我的代码:

class A {
static A obj = new A();
static int num1;
static int num2=0;

private A() {
num1++;
num2++;
}
public static A getInstance() {
return obj;
}
}

public class Main{
public static void main(String[] arg) {
A obj = A.getInstance();
System.out.println(obj.num1);
System.out.println(obj.num2);
}
}

输出是1 0,但是看不懂。

谁能给我解释一下?

最佳答案

在 Java 中发生两个阶段:1. 识别,2. 执行

  1. 识别阶段检测所有静态变量并使用默认值初始化。

    所以现在的值是:
    A obj=null
    num1=0
    num2=0

  2. 第二阶段,执行,从上到下开始。在 Java 中,执行从第一个静态成员开始。
    这里你的第一个静态变量是 static A obj = new A();,所以首先它将创建该变量的对象并调用构造函数,因此 num1 的值num2 变成 1
    然后,再次执行 static int num2=0;,这使得 num2 = 0;.

现在,假设你的构造函数是这样的:

 private A(){
num1++;
num2++;
System.out.println(obj.toString());
}

这将抛出 NullPointerException,因为 obj 仍然没有得到 class A 的引用。

关于java - static 修饰符如何影响这段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20115672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com