java中的枚举类一直是听说过,没用过,正好这几天项目中用到,通过百度和实践,现总结如下:
1,枚举类最大的好处是可以在定义枚举类的时候就能够将其所有可实例化出的对象不可扩展的定义出来。
2,枚举类可以作为switch...case...控制语句的判断条件。JDK1.7之前,java只支持type/short/char/int类型以及枚举类作为判断条件,JDK1.7之后加入了类似PHP中的以String类型作为判断田间。
3,枚举类的每个实例是单例的,并且在枚举类加载的时候就已经完全实例化。
4,枚举类的构造器必须是private,私有的。
5,枚举类是可以有属性、方法的。
6,枚举类常用来构建一些系统常量,与使用静态字符串构件系统常量不同的是,枚举类作为对象可以比字符串方式存储更复杂的数据类型作为系统常量。
7,枚举类自动提供了静态的values()方法,可以得到所有的枚举对象的数组。
8,枚举类自动的为每个枚举对象提供了ordinal()方法,来返回每个枚举对象在枚举类中声明时的顺序位置。
9,Java中的枚举类有一个非常重要的特性,那就是常量方法,即每一个枚举类定义的实例内部都可以重写枚举类的方法。
以下是代码说明:
public enum TestEnum {
//这里声明可枚举的实例,每个用","隔开,使用";"结束
//这里的实例枚举是使用构造器的方式:枚举名(构造参数列表)
TEST1(1){
@Override
/**
* 这里的方法就是常量方法,即每一个枚举实例都可以重写枚举类中定义的某个方法
*/
public Integer getIndex() {
return 10;
}
},TEST(2){
@Override
/**
* 这里的方法就是常量方法,即每一个枚举实例都可以重写枚举类中定义的某个方法
*/
public Integer getIndex() {
return 20;
}
};
//枚举类的域,可以有多个/多个基本数据类型
private Integer index;
//枚举类的构造器,必须是private私有的修饰,同时也决定了枚举对象的声明方式,说明枚举类不能随意实例化
private TestEnum(Integer i) {
System.out.println("new TestEnum");
this.index = i;
}
//枚举类的方法,可以是多种方法
public Integer getIndex() {
return index;
}
public void setIndex(Integer index) {
this.index = index;
}
// public static void main(String[] args) {
// }
//执行结果为:new TestEnum
// new TestEnum
//说明枚举类的实例,即可枚举的对象是在类加载的时候实例化的
public static void main(String[] args) {
System.out.println(TestEnum.TEST1.hashCode());
System.out.println(TestEnum.TEST.hashCode());
System.out.println(TestEnum.TEST1.hashCode());
System.out.println(TestEnum.TEST1.getIndex());
System.out.println(TestEnum.TEST.getIndex());
}
//执行结果为:new TestEnum
// new TestEnum
// 798941612
// 1743911840
// 798941612
//说明枚举类中的实例是单例的,枚举类不能随意的实例化
}