文章目录
enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。
基本语法定义
枚举类型里面的变量,一般建议全部大写。
public enum EnumDemo {
MON, TUE, WED, THU, FRI, SAT, SUN;
}
上面这个代码相当于执行了7次:
new Enum<EnumDemo>("MON",0);
new Enum<EnumDemo>("TUE",1);
...
特点
enum类型默认都继承了java.lang.Enum,也就是说它里面所有的变量都是java.lang.Enum类型。
System.out.println(EnumDemo.MON instanceof java.lang.Enum);
上面这行代码打印出来的就是true。
除了上面的基础用法以外,还可以给enum添加
枚举类自定义属性
那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。 且枚举类型的构造方法必须为私有方法。不需要加private,默认就是private的。
下面这一部分代码是参考的网上的。
public enum Day {
MONDAY(1, "星期一", "星期一各种不在状态"),
TUESDAY(2, "星期二", "星期二依旧犯困"),
WEDNESDAY(3, "星期三", "星期三感觉半周终于过去了"),
THURSDAY(4, "星期四", "星期四期待这星期五"),
FRIDAY(5, "星期五", "星期五感觉还不错"),
SATURDAY(6, "星期六", "星期六感觉非常好"),
SUNDAY(7, "星期日", "星期日感觉周末还没过够。。。");
Day(int index, String name, String value) {
this.index = index;
this.name = name;
this.value = value;
}
private int index;
private String name;
private String value;
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
测试:
public class EnumTest {
Day day;
public EnumTest(Day day) {
this.day = day;
}
public void tellItLikeItIs() {
switch (day) {
case MONDAY:
System.out.println(day.getName()+day.getValue());
break;
case FRIDAY:
System.out.println(day.getName()+day.getValue());
break;
case SATURDAY: case SUNDAY:
System.out.println(day.getName()+day.getValue());
break;
default:
System.out.println(day.getName()+day.getValue());
break;
}
}
public static void main(String[] args) {
EnumTest firstDay = new EnumTest(Day.MONDAY);
firstDay.tellItLikeItIs();
EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
thirdDay.tellItLikeItIs();
EnumTest fifthDay = new EnumTest(Day.FRIDAY);
fifthDay.tellItLikeItIs();
EnumTest sixthDay = new EnumTest(Day.SATURDAY);
sixthDay.tellItLikeItIs();
EnumTest seventhDay = new EnumTest(Day.SUNDAY);
seventhDay.tellItLikeItIs();
}
}
枚举值自定义属性添加内部方法
public class EnumTest {
Day day;
public EnumTest(Day day) {
this.day = day;
}
public void tellItLikeItIs() {
switch (day) {
case MONDAY:
System.out.println(day.getName()+day.getValue());
System.out.println(day.getName()+"的下一天是"+day.getNext().getName());
break;
case FRIDAY:
System.out.println(day.getName()+day.getValue());
System.out.println(day.getName()+"的下一天是"+day.getNext().getName());
break;
case SATURDAY: case SUNDAY:
System.out.println(day.getName()+day.getValue());
System.out.println(day.getName()+"的下一天是"+day.getNext().getName());
break;
default:
System.out.println(day.getName()+day.getValue());
System.out.println(day.getName()+"的下一天是"+day.getNext().getName());
break;
}
}
public static void main(String[] args) {
EnumTest firstDay = new EnumTest(Day.MONDAY);
firstDay.tellItLikeItIs();
EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
thirdDay.tellItLikeItIs();
EnumTest fifthDay = new EnumTest(Day.FRIDAY);
fifthDay.tellItLikeItIs();
EnumTest sixthDay = new EnumTest(Day.SATURDAY);
sixthDay.tellItLikeItIs();
EnumTest seventhDay = new EnumTest(Day.SUNDAY);
seventhDay.tellItLikeItIs();
}
}
调用:
扫描二维码关注公众号,回复:
11105077 查看本文章
public class EnumTest {
Day day;
public EnumTest(Day day) {
this.day = day;
}
public void tellItLikeItIs() {
switch (day) {
case MONDAY:
System.out.println(day.getName()+day.getValue());
System.out.println(day.getName()+"的下一天是"+day.getNext().getName());
break;
case FRIDAY:
System.out.println(day.getName()+day.getValue());
System.out.println(day.getName()+"的下一天是"+day.getNext().getName());
break;
case SATURDAY: case SUNDAY:
System.out.println(day.getName()+day.getValue());
System.out.println(day.getName()+"的下一天是"+day.getNext().getName());
break;
default:
System.out.println(day.getName()+day.getValue());
System.out.println(day.getName()+"的下一天是"+day.getNext().getName());
break;
}
}
public static void main(String[] args) {
EnumTest firstDay = new EnumTest(Day.MONDAY);
firstDay.tellItLikeItIs();
EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
thirdDay.tellItLikeItIs();
EnumTest fifthDay = new EnumTest(Day.FRIDAY);
fifthDay.tellItLikeItIs();
EnumTest sixthDay = new EnumTest(Day.SATURDAY);
sixthDay.tellItLikeItIs();
EnumTest seventhDay = new EnumTest(Day.SUNDAY);
seventhDay.tellItLikeItIs();
}
}
所有enum类型都会继承Enum.java的方法,包括:
a. ordinal()方法:返回枚举值在enum类中的顺序。这个顺序依据枚举值声明时的顺序而定。
Color.RED.oridinal(); //返回结果:0
b. compareTo()方法:
Color.RED.compareTo(Color.BLUE); //返回结果:-1
c. toString():返回枚举值的名称
Color.RED.toString(); //返回结果:RED
d. values():返回一个包含全部枚举值的数组
Color[] colors = Color.values();
e. valueOf():返回枚举值常量
Color.valueOf("BLUE"); //返回结果:Color.BLUE
d. equals() : 比较两个枚举类对象的引用。
总之枚举类型和类差不多由于它已经继承了Enum类,所以它没法再继承其他的类了,但是可以实现接口。
参考链接一
参考链接2
参考链接3
参考链接4