gpt4 book ai didi

Java Calendar YEAR 在被初始化为静态 int 时返回零

转载 作者:行者123 更新时间:2023-11-29 03:37:22 25 4
gpt4 key购买 nike

我试图理解下面两行之间的区别。为什么在我向字段添加静态时返回零。

private static final int this_year = Calendar.getInstance().get(Calendar.YEAR);

由此我得到:this_year = 0;

private final int this_year = Calendar.getInstance().get(Calendar.YEAR);

由此我得到:this_year = 2013;

谁能解释为什么第一个返回零?

这是我使用它的代码:

public class TheKing {
public static final TheKing theKing = new TheKing();
private final int beltSize;
private static final int this_year = Calendar.getInstance().get(Calendar.YEAR);

private TheKing() {
beltSize = this_year - 1930;
}

public int beltSize() {
return beltSize;
}

public static void main(String[] args) {
System.out.println("TheKing wears a size " +
theKing.beltSize() + " belt.");
}
}

最佳答案

当字段被声明为static时,它们在静态初始化方法中被初始化,这意味着您的代码在编译时看起来像下面这样:

static {
theKing = new TheKing();
this_year = Calendar.getInstance().get(Calendar.YEAR);
}

请注意构造函数在 this_year 初始化之前调用,并且在 int 初始化之前,它的默认值为 0。换句话说,this_year 在设置为 2013 之前使用。

解决这个问题的一种方法是简单地颠倒声明的顺序:

private static final int this_year = Calendar.getInstance().get(Calendar.YEAR);
public static final TheKing theKing = new TheKing();

关于Java Calendar YEAR 在被初始化为静态 int 时返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14801670/

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