Java日历年初始化为静态int时返回零
我试图理解下面两行之间的区别。为什么我在字段中添加static时返回零Java日历年初始化为静态int时返回零,java,Java,我试图理解下面两行之间的区别。为什么我在字段中添加static时返回零 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 能解释为什么第一个返回零的人 下面是我使
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.");
}
}
因此,上面将首先初始化theKing
,它调用构造函数,构造函数使用今年的未初始化值0
。如果要将其更改为:
private static final int this_year = Calendar.getInstance().get(Calendar.YEAR);
public static final TheKing theKing = new TheKing();
它会很好用的
或者,如果删除静态
,今年
将在对象国王
创建时初始化。
因此,上面将首先初始化theKing
,它调用构造函数,构造函数使用今年的未初始化值0
。如果要将其更改为:
private static final int this_year = Calendar.getInstance().get(Calendar.YEAR);
public static final TheKing theKing = new TheKing();
它会很好用的
或者,如果您删除静态
,今年的将在对象国王
创建时进行初始化。当字段声明为静态
时,它们将在静态初始化方法中进行初始化,这意味着您的代码在编译时如下所示:
static {
theKing = new TheKing();
this_year = Calendar.getInstance().get(Calendar.YEAR);
}
请注意,在初始化this\u year
之前调用构造函数,在初始化int
之前,构造函数的默认值为0
。换句话说,本年度在设置为2013
之前使用
解决此问题的一种方法是简单地颠倒声明的顺序:
private static final int this_year = Calendar.getInstance().get(Calendar.YEAR);
public static final TheKing theKing = new TheKing();
当字段声明为静态时,它们将在静态初始化方法中初始化,这意味着您的代码在编译时如下所示:
static {
theKing = new TheKing();
this_year = Calendar.getInstance().get(Calendar.YEAR);
}
请注意,在初始化this\u year
之前调用构造函数,在初始化int
之前,构造函数的默认值为0
。换句话说,本年度在设置为2013
之前使用
解决此问题的一种方法是简单地颠倒声明的顺序:
private static final int this_year = Calendar.getInstance().get(Calendar.YEAR);
public static final TheKing theKing = new TheKing();
两个代码块看起来相同。请整理您的代码,以了解您的问题。this_year=2013
在这两种情况下对我来说都是如此。您如何在其他地方使用这些值?除了@Vulcan之外的其他结果。到目前为止,如果使用static、2013和all OK,当我打印时,非静态会导致异常“从静态上下文引用非静态变量”。我有Java版本“1.7.0_13”,两个代码块看起来都一样。请整理您的代码,以了解您的问题。this_year=2013
在这两种情况下对我来说都是如此。您如何在其他地方使用这些值?除了@Vulcan之外的其他结果。到目前为止,如果使用静态、2013和所有OK,则在打印时,非静态会导致异常“从静态上下文引用非静态变量”。我有Java版本“1.7.0_13”