Tin*_*iny 7 java static static-members
以下代码只是从使用java.util.Calendar该类获得的当前年份中减去一个值(在本例中为10,仅用于演示).
public final class Test
{
private static final Test TEST = new Test();
private static final int YEAR = Calendar.getInstance().get(Calendar.YEAR);
private final int eval=YEAR - 10;
public static void main(String[] args)
{
System.out.println("Evaluation "+TEST.eval);
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这段代码显示2003(当前年份 - 10),但显示它-10.我假设常量YEAR尚未初始化.为什么会发生这种情况?
因为它不是static- 你必须创建一个对象才能使用这个字段!(或将其更改为静态)
尝试:
public final class Test
{
private static final Test TEST = new Test();
private static final int YEAR = Calendar.getInstance().get(Calendar.YEAR);
private final int eval=YEAR - 10;
public static void main(String[] args)
{
Test t = new Test();
System.out.println("Evaluation "+t.eval);
}
}
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为您在初始化Test之前正在初始化YEAR- 这意味着它将转到(隐式)构造函数并初始化eval为YEAR-10之前YEAR有一个值(因此它默认为0).
如注释中所述,只需在初始化中更改YEAR和TEST的顺序即可.
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |