gpt4 book ai didi

java - 返回静态初始值设定项

转载 作者:搜寻专家 更新时间:2023-10-30 21:00:28 26 4
gpt4 key购买 nike

这不是有效的代码:

public class MyClass
{
private static boolean yesNo = false;

static
{
if (yesNo)
{
System.out.println("Yes");
return; // The return statement is the problem
}
System.exit(0);
}
}

这是一个愚蠢的例子,但在静态类构造函数中我们不能return;。为什么?这有充分的理由吗?有人对此有更多了解吗?

所以我应该做 return 的原因是在那里结束构建。

谢谢

最佳答案

我认为原因是初始化器与字段初始化一起携带(在实例初始化器的情况下,还与构造函数一起携带)。换句话说,JVM 只识别一个地方来初始化静态字段,因此所有初始化 - 无论是否在 block 中 - 都必须在那里完成。

因此,例如,当您编写一个类时:

class A {
static int x = 3;
static {
y = x * x;
}
static int z = x * x;
}

那么实际上就好像你写了:

class A {
static int x, y, z;
static {
x = 3;
y = x * x;
z = x * x;
}
}

如果您查看反汇编,可以确认这一点:

static {};
Code:
0: iconst_3
1: putstatic #5; //Field x:I
4: getstatic #5; //Field x:I
7: getstatic #5; //Field x:I
10: imul
11: putstatic #3; //Field y:I
14: getstatic #5; //Field x:I
17: getstatic #5; //Field x:I
20: imul
21: putstatic #6; //Field z:I
24: return

因此,如果您在静态初始值设定项的中间某处添加了一个“return”,它也会阻止计算 z。

关于java - 返回静态初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2607112/

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