枚举类型特性:
- enum和class、interface的地位一样
- 使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类。枚举类可以实现一个或多个接口。
- 枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。
- 使用enum定义、非抽象的枚举类默认使用final修饰,不可以被继承。
- 枚举类的构造器只能是私有的。
枚举类如下:
// Enum.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import static java.lang.System.out;
public enum EnumTest {//枚举类
SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");//第一行,枚举实例(枚举类型成员,由于它们默认是被public,static,final修饰。所以。一般大写)
private String name;//非枚举类型成员, 可变化
//private EnumTest(){}
private EnumTest(String name){
this.name = name ;
}
public String getName(){//向外提供接口
return "get "+name;
}
public void setName(String str){//向外提供接口
name = str;
}
//由于枚举类的核心部分是第一行的枚举实例,并且枚举实例是不能通过new来创建的,对于他们的管理,引用,是通过枚举类型操作方法:values,valueOf等
}
测试类如下
// TestEnum.java
import static java.lang.System.out;
import java.util.Scanner;
public class TestEnum {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("test:");
Scanner ins = new Scanner(System.in);
String outs = ins.next().toUpperCase();
EnumTest[] hm = EnumTest.values();//集合类大小用.size();数组用length
for(int i =0; i <EnumTest.values().length;i++ ){
out.println(hm[i].getName());
}
for(EnumTest t:hm){
out.println(t+" "+t.getName());
}
EnumTest et = EnumTest.valueOf(outs);//将普通字符串(与某个枚举实例名字相同)与该枚举实例对应起来
out.println("你选择了当中的 : "+et);
out.println(EnumTest.SUMMER.getName());
et.setName("Summer");
out.print(EnumTest.SUMMER.getName());
}
}
参考博客:
1.https://www.cnblogs.com/sister/p/4700702.html
【JAVA】浅谈java枚举类
2.https://blog.youkuaiyun.com/you23hai45/article/details/54633189
No enum constant com.you.example.EnumExample.Season.