enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。
可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)。
package com.xbl.springmvc.iterator;
public enum Season {
// enum 对象加一下 num 的属性和 getNum() 的方法:
SPRING(1),SUMMER(2),
AUTUMN(3){
@Override
public boolean isRest() {
return true;
}
},
WINTER(4){
@Override
public boolean isRest() {
return true;
}
};
private Season(int num) {
this.num = num;
}
private int num;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public boolean isRest() {
return false;
}
}
package com.xbl.springmvc.iterator;
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.Map;
public class SeasonTest {
public static void main(String[] args) {
System.out.println("test----enum");
testEnum();
System.out.println("test----enumSet");
enumSetTest();
System.out.println("test----enumMap");
enumMapTest();
}
private static void testEnum() {
Season[] season = Season.values();
System.out.println(season.toString());
System.out.println("夏天:"+Season.SUMMER.isRest());
System.out.println(season[2].name()+":"+season[2].isRest());
System.out.println("冬天:"+Season.WINTER.isRest());
System.out.println("枚举含有的数量:"+season.length);
System.out.println("valueOf:"+Season.valueOf("SPRING")+"-->"+Season.valueOf("SPRING").getClass());
for (Season s:season) {
System.out.print(s.getNum()+":");
System.out.println(s.name());
if (s.equals(Season.WINTER)) {
//比较此枚举与指定对象的顺序 int compareTo(E o)
System.out.println("冬天相比夏天:"+s.compareTo(Season.SUMMER));
System.out.println("夏天相比冬天:"+Season.SUMMER.compareTo(s));
//返回与此枚举常量的枚举类型相对应的 Class 对象 Class<E> getDeclaringClass()
System.out.println(s.getDeclaringClass());
//返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)int ordinal()
System.out.println(s.ordinal());
//返回枚举常量的名称,它包含在声明中。
System.out.println(s.toString());
}
}
}
private static void enumSetTest() {
EnumSet<Season> seasons = EnumSet.allOf(Season.class);
for (Season s : seasons) {
System.out.println(s.name()+":"+s.getNum()+"-->stauts:"+s.isRest());
}
}
private static void enumMapTest() {
EnumMap<Season, String> seasonString = new EnumMap<>(Season.class);
seasonString.put(Season.SPRING, "春天");
seasonString.put(Season.WINTER, "冬天");
for (Iterator<Map.Entry<Season, String>> iterator = seasonString.entrySet().iterator();iterator.hasNext();) {
Map.Entry<Season, String> entry = iterator.next();
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
}
"C:\Program Files\Java\jdk1.8.0_131\bin\java.exe" "-javaagent:E:\tools\IntelliJ IDEA 2019.2\lib\idea_rt.jar=60012:E:\tools\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_131\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\rt.jar;E:\model\out\production\model" com.xbl.springmvc.iterator.SeasonTest
test----enum
[Lcom.xbl.springmvc.iterator.Season;@1540e19d
夏天:false
AUTUMN:true
冬天:true
枚举含有的数量:4
valueOf:SPRING-->class com.xbl.springmvc.iterator.Season
1:SPRING
2:SUMMER
3:AUTUMN
4:WINTER
冬天相比夏天:2
夏天相比冬天:-2
class com.xbl.springmvc.iterator.Season
3
WINTER
test----enumSet
SPRING:1-->stauts:false
SUMMER:2-->stauts:false
AUTUMN:3-->stauts:true
WINTER:4-->stauts:true
test----enumMap
SPRING:春天
WINTER:冬天
Process finished with exit code 0