您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
javase第三季学习笔记-枚举
发布时间:2017-08-10 15:56:51编辑:雪饮阅读()
认识枚举
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则编译器就 会报错,枚举可以让编译器在编译时就可以控制源程序赋给的非法值,使用普通变 量的方式在开发阶段无法实现这一目标。 • 在JDK 1.5 JDK 1.5之后,使用关键字enum定义 种新的类型 一 ,称为枚举类型。
Enum类与enum关键字
使用enum关键字定义的枚举类,实际上就相当于定义了一个类,此类继承了Enum类 而已。
Enum类中定义了如下的方法:
示例代码:
入口程序:
package com.vince.enumtest;
public class EnumDemo {
public static void main(String[] args) {
System.out.println("-----自己手动实现枚举----");
Controller on=Controller.ON;
System.out.println(on);
Controller c1=on.downAction();
System.out.println(c1);
System.out.println("---java内置API实现枚举---");
EnumController ecON=EnumController.ON;
System.out.println(ecON);
System.out.println("枚举项的名称:"+ecON.name());
System.out.println("枚举项的序号:"+ecON.ordinal());
System.out.println("-----枚举项的所在枚举元素集合-----");
//遍历枚举
EnumController[] es=EnumController.values();
for(int i=0;i<es.length;i++){
System.out.println(es[i]);
}
//返回带有指定名称的该类型的枚举常量,传值只能传枚举元素集合中的元素
EnumController ecoff=EnumController.valueOf("OFF");
System.out.println(ecoff);
}
}
用到的抽象类:Controller
package com.vince.enumtest;
public abstract class Controller {
private Controller(){}
public static final Controller ON=new Controller(){
public Controller downAction() {
return OFF;
}
public String toString(){
return "OFF";
}
};
public static final Controller OFF=new Controller(){
public Controller downAction() {
return ON;
}
public String toString(){
return "ON";
}
};
public abstract Controller downAction();
}
用到java的api的枚举:EnumController
package com.vince.enumtest;
public enum EnumController {
ON,OFF
}
集合对枚举的支持
在JDK 1.5之后,对于Set和Map接口而言又增加了两个新的子类:EnumSet、 EnumMap两个类。
示例代码:EnumSetDemo
package com.vince.enumtest;
import java.util.EnumSet;
public class EnumSetDemo {
public static void main(String[] args) {
//创建一个包含指定元素类型的所有元素的枚举 set(从枚举集合中取出所有枚举项作为set集合的元素生成一个set集合)
EnumSet<EnumController> set=EnumSet.allOf(EnumController.class);
for(EnumController enumcontroller:set){
System.out.println(enumcontroller);
}
}
}
示例代码:EnumMapDemo
package com.vince.enumtest;
import java.util.EnumMap;
import java.util.Set;
public class EnumMapDemo {
public static void main(String[] args) {
//EnumMap是用来存储从枚举的数组
EnumMap<EnumController,String> map=new EnumMap<EnumController,String>(EnumController.class);
//以枚举项为键名,向map数组中添加键值对
map.put(EnumController.ON,"打开");
map.put(EnumController.OFF,"关闭");
Set<EnumController> keySet=map.keySet();
for (EnumController enumController : keySet) {
System.out.println(enumController+"---"+map.get(enumController));
}
}
}
带构造方法的枚举:
EnumDemo为程序入口,该类中main方法新增如下:
System.out.println("----带构造方法的枚举----");
//会出现4个输出,因为枚举中有4个实例,实例在创建时就会调用构造方法
EnumGirl eg1=EnumGirl.Girl1;
用到的类:EnumGirl
package com.vince.enumtest;
//带构造方法的枚举
public enum EnumGirl {
Girl1("雪饮喜欢杜姐姐"),Girl2,Girl3("杜姐姐喜欢雪饮"),Girl4;
private String name;//姓名
//枚举中的构造方法必须是私有的
private EnumGirl(){
System.out.println("无参构造方法");
}
private EnumGirl(String name){
this.name=name;
System.out.println("带参构造方法");
}
}
枚举实现接口:
EnumColor:
package com.vince.enumtest;
//让枚举实现接口,enum只能接口但不能继承,因为enum本身已经继承了Enum
public enum EnumColor implements Info {
RED{
public String getColor(){
return "红色";
}
},BLUE{
public String getColor(){
return "蓝色";
}
},GREEN{
public String getColor(){
return "绿色";
}
};
}
interface Info{
public String getColor();
}
调用:
System.out.println("---让枚举实现接口---");
System.out.println(EnumColor.RED.getColor());
在枚举中定义抽象方法:
package com.vince.enumtest;
//枚举中定义抽象方法
public enum EnumController2 {
ON {
@Override
public EnumController2 downAction() {
return OFF;
}
},OFF {
@Override
public EnumController2 downAction() {
return ON;
}
};
public abstract EnumController2 downAction();
}
调用:
System.out.println("---让枚举中定义抽象方法---");
System.out.println(EnumController2.ON.downAction());
关键字词:javase,枚举