------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
package com.itheima.zqt;
enum Color{
RED,GREEN,YELLOW;//定义枚举的三个类型
}
public class EnumDemo{
public static void main(String[] args) {
Color c = Color.RED; //取得类型
System.out.println(c);
Color[] values = Color.values(); //获得全部枚举类型
for (Color color : values) {
System.out.println(color);
switch (color) {// enum 在switch中的使用
case RED:
System.out.println("红色");
break;
case GREEN:
System.out.println("绿色");
break;
case YELLOW:
System.out.println("黄色");
break;
default:
break;
}
}
}
}
通过构造方法为属性赋值
package com.itheima.zqt;
enum Color{
RED("红色"),GREEN("绿色"),YELLOW("黄色");
private Color(String name) {
this.setName(name);
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class EnumDemo{
public static void main(String[] args) {
for (Color c :Color.values()) {
System.out.println(c.ordinal()+"->"+c.name()+":"+c.getName()); //获得枚举常量的序号和名称
}
Color c = Enum.valueOf(Color.class,"GREEN");//通过反射的方式获得获得枚举类的对象
System.out.println(c.name());
}
}
enum关键字表示的是java.lang.Enum类型,使用enum 相当于定义一个类,此类默认继承java.lang.Enum,可以使用比较器和序列化操作
public abstract class Enum<E extends Enum<E>>
implements Comparable<E>, Serializable {
在Enum类中的定义中已经实现好了Compareable接口,根据ordinal 属性排序。
enum Color{
RED,GREEN,YELLOW;
}
public class EnumDemo{
public static void main(String[] args) {
Set<Color> t = new TreeSet<Color>();
t.add(Color.YELLOW);
t.add(Color.GREEN);
t.add(Color.RED);
Iterator<Color> iterator = t.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
运行结果:
RED
GREEN
YELLOW
EnumMap 和EnumSet
EnumMap 是java.uitl.Map接口的一个特殊实现,他的key是一个枚举类型
enum Color{
RED,GREEN,YELLOW;
}
public class EnumDemo{
public static void main(String[] args) {
Map<Color,String> desc = null;
desc = new EnumMap<Color, String>(Color.class);
desc.put(Color.RED, "红色");
desc.put(Color.GREEN, "绿色");
desc.put(Color.YELLOW, "黄色");
System.out.println("输出全部枚举");
for (Color c : Color.values()) {
System.out.println(c.name()+"->"+desc.get(c));
}
System.out.println("输出全部键值");
for (Color c : desc.keySet()) {
System.out.print(c.name()+" ");
}
System.out.println();
System.out.println("输出全部value");
for (String string : desc.values()) {
System.out.print(string+" ");
}
}
}
运行结果:
输出全部枚举
RED->红色
GREEN->绿色
YELLOW->黄色
输出全部键值
RED GREEN YELLOW
输出全部value
红色 绿色 黄色
EnumSet是Set接口的子类,内容不能重复,EnumSet不能使用new实例化,所以此类提供了静态方法
enum Color{
RED,GREEN,YELLOW;
}
public class EnumDemo{
public static void main(String[] args) {
EnumSet<Color> es = null;
es = EnumSet.allOf(Color.class); //将枚举的全部属性设置到EnumSet对象中
print(es);
es = EnumSet.of(Color.GREEN); //设置一个枚举的内容
print(es);
es = EnumSet.noneOf(Color.class); // 只能加入Color类型的集合
es.add(Color.GREEN);
es.add(Color.YELLOW);
print(es);
EnumSet<Color> esNew = EnumSet.complementOf(es);//创建一个不包含指定元素的集合
print(esNew);
esNew = EnumSet.copyOf(es); //从已有集合中复制出内容
print(esNew);
}
public static void print(EnumSet<Color> es){
for (Color color : es) {
System.out.println(color);
}
System.out.println("——————————————");
}
}
枚举类实现一个接口
必须对枚举类中的每个对象分别实现接口中的方法
interface Print{
public String getColor() ;
}
enum Color implements Print{
RED{
public String getColor(){
return "红色" ;
}
},GREEN{
public String getColor(){
return "绿色" ;
}
},BLUE{
public String getColor(){
return "蓝色" ;
}
} ;
}
public class InterfaceEnumDemo{
public static void main(String args[]){
for(Color c:Color.values()){
System.out.print(c.getColor() + "、") ;
}
}
};
在枚举类中定义抽象方法
每个枚举的对象分别实现抽象方法
enum Color {
RED{
public String getColor(){
return "红色" ;
}
},GREEN{
public String getColor(){
return "绿色" ;
}
},BLUE{
public String getColor(){
return "蓝色" ;
}
} ;
public abstract String getColor() ;
}
public class AbstractMethodEnum{
public static void main(String args[]){
for(Color c:Color.values()){
System.out.print(c.getColor() + "、") ;
}
}
};