1.枚举类型(Enum)
定义:指由一组固定的常量组成合法值的类型
相对于直接int或String类型的常量比较,枚举类型更加安全。
特点:
1.枚举类型没有可以访问的构造器时,则是真正的final类
2.客户端无法创建枚举类型的实例,也不能对它进行扩展,因此不存在实例,只存在声明过的枚举常量(相当于单例的泛型化)
3.枚常量无法通过其构造器访问另一个构造器
适用范围:当需要一组固定常量且编译时就知道其成员的时候就可以使用枚举。
PS:如果一个枚举具有普遍适用性,则它应该成为一个顶层类(就是独立的一个类)。
PS:如果一个枚举被用于一个特定的顶层类,那么它应该成为那个顶层类的一个成员类(就是之前将的嵌套类)
2.实际使用
2.1 无构造器
public class UseMain {
enum SardineEnum {
A,
B,
C,
D
}
public static void main(String[] args) {
SardineEnum type=SardineEnum.A;
switch (type){
case A:System.out.println("A"); break;
case B:System.out.println("B"); break;
case C:System.out.println("C"); break;
case D:System.out.println("D"); break;
}
}
}
结果:A
2.2 有构造器
public class UseMain {
enum SardineEnum {
A("沙",0),
B("丁",1),
C("鱼",2),
D("flat",3);
private String name;
private int index;
SardineEnum(String theEnum, int index) {
this.name=theEnum;
this.index=index;
}
public String getTwoEnum(int index1,int index2){
String TwoEnum="";
for (SardineEnum myenum : SardineEnum.values()) {
if(myenum.getIndex()==index1||myenum.getIndex()==index2){
TwoEnum+=myenum.getName();
}
}
return TwoEnum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
public static void main(String[] args) {
SardineEnum type=SardineEnum.A;
System.out.println("enum对象所在的index:"+type.getIndex());
System.out.println("enum对象所在的name:"+type.getName());
System.out.println("enum对象所在的自写方法的返回:"+type.getTwoEnum(1,2));
}
}
结果:
2.3 其它用法
枚举除简单的当做常量,或者使用构造方法外,其它的方法也需要注意点;
1.如果在枚举中覆盖toString时,要考虑编写一个fromString方法,将定制字符串表示法变会相应的枚举
2.枚举可以实现接口,对接口的方法进行重写