Enum枚举类
来源:互联网 发布:淘宝充值刷信誉有用吗 编辑:程序博客网 时间:2024/05/17 19:21
public enum TestEnum { //枚举写在最前面,赋值要都一起赋值, //这个声明定义的类型是一个类,它刚好有四个实例, UPDATE(1,"更新"),QUERY(2,"查询"),DELETE(3,"删除"); //通过括号赋值,必须带有一个构造器,和属性跟方法 private int enValue; private String enDesc; //构造器默认只能是private的,只能内部使用 private TestEnum(int enValue,String enDesc){ this.enValue=enValue; this.enDesc=enDesc; } //枚举想普通类一样可以添加属性和方法 public static TestEnum getEnu(){ return UPDATE; } //在switch语句中使用枚举 public void useSwitch(){ TestEnum en=TestEnum.QUERY; switch (en){ case UPDATE: en=TestEnum.UPDATE;break; case QUERY: en=TestEnum.QUERY;break; default:en=DELETE; } } //get和set方法 public int getEnValue() { return enValue; } public String getEnDesc() { return enDesc; }}
经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum。而java中又是没有多继承的,所以枚举类不能继承。但是可以实现接口
public final class TestEnum extends java.lang.Enum{ //枚举常量都是实例 public static final TestEnum UPDATE; public static final TestEnum QUERY; public static final TestEnum DELETE; public static TestEnum getEnu(){...}; public void useSwitch(){...}; public static TestEnum [] values(); public static TestEnum valueOf(java.lang.String); }
values()和 valueOf()方法都是编译器在编译枚举类的时候添加上去的。
public static void main(String[] args) { Class clazz=TestEnum.class; Method[] methods=clazz.getDeclaredMethods(); for(Method method:methods){ System.out.println(method.getName()); } }//结果main//编译时加上去的valuesvalueOfgetEnuuseSwitchgetEnValuegetEnDesc
利用values()方法遍历枚举中的值:
//vlaues()方法返回一个数组 for(TestEnum en:TestEnum.values()){ //获取常量 System.out.print(en+" "); //获取常量的属性值 System.out.println(en.getEnDesc()+" "+en.getEnValue()); //获取常量的顺序,从0开始 System.out.println(en.ordinal()); }//结果UPDATE 更新 10QUERY 查询 21DELETE 删除 32
valueOf()方法是通过枚举元素的名称获取一个枚举类
TestEnum delete=TestEnum.valueOf("DELETE");
java.lang.Enum这个父类中也有一个valueOf方法,用法不同:
Enum.valueOf(TestEnum.class, "DELETE")
重写枚举类中的方法
在枚举元素中可以自定义方法,来重写枚举类中的方法。
每一个枚举元素都是一个继承枚举类的内部子类,并且每一个内部子类中都包含所有的枚举元素。
public enum MethodENUM { //因为每个常量都是一个实例,它们都继承自枚举类,因此它们 //拥有枚举类的元素,包括其他的常量 GREEN{ //复写枚举中的方法 @Override public void getInfo() { super.getInfo(); } }, Red{ @Override public void getInfo() { super.getInfo(); } }; //该方法会被复写 public void getInfo(){ } public static void main(String[] args) { MethodENUM color=GREEN; //color拥有Red元素,而Red元素也拥有自身Red color.Red.Red.getInfo(); }}
关于枚举集合的使用
java.util.EnumSet和java.util.EnumMap是两个枚举集合。
EnumSet保证集合中的元素不重复;
EnumMap中的 key是enum类型,而value则可以是任意类型。
public static void main(String[] args) { //EnumMap实例 EnumMap<TestEnum,String> testMap=new EnumMap<TestEnum, String>(TestEnum.class); testMap.put(TestEnum.DELETE,"删除"); testMap.put(TestEnum.QUERY,"查询"); testMap.put(TestEnum.UPDATE,"更新"); for(TestEnum testEnum:TestEnum.values()){ System.out.println(testMap.get(testEnum)); } //EnumSet实例 EnumSet<TestEnum> testSet=EnumSet.allOf(TestEnum.class); for(TestEnum testEnum:testSet){ System.out.println(testEnum); } }//结果://EnumMap更新查询删除//EnumSetUPDATEQUERYDELETE
阅读全文
0 0
- 枚举 类 enum
- 枚举类enum
- Enum枚举类
- enum枚举类
- enum枚举类
- Java枚举类 enum
- JAVA 枚举类 Enum
- 枚举类 Enum 使用
- enum枚举类
- Enum枚举类
- JAVA 枚举类 enum
- Enum枚举类
- 枚举类enum
- 枚举---Enum类
- [转]Enum还是Enum Class(枚举类)
- [转]Enum还是Enum Class(枚举类)
- Enum还是Enum Class(枚举类)
- java enum 枚举类 1
- 快速排序
- Alamofire进行网络请求(实训)
- 首个裸眼3D行业标准推出!真实视觉迎来发展新契机_智能
- 单例模式
- android 高级之旅 (一)网络加载框架volley基本用法
- Enum枚举类
- $.ajax()方法详解
- 分享一个不用pypcap的python抓包脚本
- JavaScript&JavaScript引擎&ECMAScript的关系
- C语言作业-5-1高精度小数
- 几种存储器的学习笔记
- MyBatis优化——log4j的使用
- Strtus2 简单的小列子
- UOJ#214. 【UNR #1】合唱队形