gpt4 book ai didi

java - 为什么静态 block 中的代码不执行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:27:39 25 4
gpt4 key购买 nike

当我在 main 中打印 constant 时,static block 不执行,但是当我打印 stat,它确实执行了。 Java 中的 static final 有什么重要性吗?

package com.test.doubt;

class Doubt {

public static final int constant = 123;
public static int stat = 123;

static {
System.out.println("Static Block");
}
}

public class MyProgram {

public static void main(String[] args) {
System.out.println(Doubt.constant);
}
}

最佳答案

您的代码没有初始化 Doubt 类,正是因为 Doubt.constant 常量。它的值在编译时被写入 MyProgram - 你甚至可以在编译后删除 Doubt.class 而你的程序仍然会运行。

运行

javap -c com.test.doubt.MyProgram

看看你的代码编译后的样子。

参见 section 15.28 of the JLS对于什么构成常量表达式。例如,这仍然是一个常量:

public static final String FOO = "Foo";

所有这些也是如此:

public static final String FOO = "Foo";
public static final String BAR = "Bar";
public static final String FOOBAR = FOO + BAR;

...但这不会是

public static final String NOT_A_CONSTANT = "Foo".substring(0, 1);

关于java - 为什么静态 block 中的代码不执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11863800/

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