枚举是强类型数据,具有更高的安全性,并且它将运行期的参数检查放到了编译期,保证了代码编写的准确性,提高了代码的可读性,但是,枚举也并非完美的的,它会占用更多的空间
测试代码:
public enum Season {
Spring(1,"春","cyan","warmth"){
public void doSomething(){};
},Summer(2,"夏","green","hot"){
public void doSomething(){};
},
Autumn(3,"秋","yellow","cool"){
public void doSomething(){};
},Winter(4,"冬","white","cold"){
public void doSomething(){};
};
private int code;
private String name;
private String color;
private String feel;
Season(int code, String name, String color, String feel) {
this.code = code;
this.name = name;
this.color = color;
this.feel = feel;
}
public int getCode() {
return code;
}
public String getName() {
return name;
}
public String getColor() {
return color;
}
public String getFeel() {
return feel;
}
}
接下来使用javac命令进行编译:
如果编译时提示:编码GBK的不可映射字符,可以在命令后面加入-encoding UTF-8 如:javac -encoding UTF-8 Season.java
可以看出,编译后产生了五个文件,这五个文件是什么呢?我们可以使用javap反编译指令来查看其中的内容
Season$1.class
由于Season$2~$4的内容一样,就不一一列出了
下面是Season.class的内容
可以看出枚举类型使用了public static final 关键字修饰
但是这仅仅是体现在文件数量上吗
在开发时,我们还常常使用零另一种方式定义一些公共的,不变的量,那就是静态常量,下面使用静态变量来进行测试
测试代码
public class Season {
public static final int SPRING=1;
public static final int SUMMER=2;
public static final int ATUMN=3;
public static final int WINTER=4;
}
使用javac编译后值产生了一个文件
可以看出,两个文件大小差了十多倍