我在处理枚举时感到有些困难。以下是Kathy Siera书中的一个示例:
public class WeatherTest {
static Weather w;
public static void main(String[] args) {
System.out.print(w.RAINY.count + " " + w.Sunny.count + " ");
}
}
enum Weather {
RAINY, Sunny;
int count = 0;
Weather() {
System.out.print("c ");
count++;
}
}
输出结果是 c c 1 1。明白了。 现在我想,如果计数字段是静态的会怎样呢?输出会变成 c c 2 2 吗? 基于这个想法,我把计数变量改成了静态的。 但是我看到的是这样的: 编译时错误:从初始化程序引用静态字段非法。 在网上搜索后,我发现这是Sun公司的一种漏洞,它允许可以更改静态字段的静态方法。好的,现在我使用一个静态方法incr来完成我的工作:
class WeatherTest {
static Weather w;
public static void main(String[] args) {
System.out.print(w.RAINY.count + " " + w.Sunny.count + " ");
}
}
enum Weather {
RAINY, Sunny;
Weather() {
System.out.print("c ");
incr();
}
static int count = 0;
static void incr() {
count++;
}
}
出乎意料的是,我得到了这样的输出:c c 0 0!有谁可以在我开枪前解释一下这种行为吗?