Java枚举使用详解
2017-07-03 18:48
260 查看
魅力见仁见智,拼不过姿势拼知识!
愉快的周一,哈哈!周六在家安装了VmPlayer 和Ubuntu,下载了最新的FFmpeg-3.3.2编译一把,然后用android Studio小小的运行了一下,嗯!还不错,终于弥补了之前做音视频编译时作为“伸手党”耻辱。当然,也只是编译出了arm架构的so包,也只是简单模仿网上大神,也只是简单的实现了小功能,等有些问题搞明白了,再写关于编译和使用FFmpeg的博客(感觉已经入坑了,不过有了久违的成就感!哈哈…)。
好了,进入正题。话说,我们为啥药使用枚举呢?
在JDK1.5之前,我们定义常量都是:
想想,如果一个逻辑功能稍微复杂点的类中,再如果常量比较多的,并且大多时候,我们用一组常量来判断某种状态功能的不同情况的,当这种情况状态比较多的时候,大量的静态常量会导致程序的代码量臃肿,并且可读性差,所以有了枚举,就可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。相应的,在JDK1.6,switch语句也添加了对枚举的响应判断,于是这个体系也得到了相应的完善。
枚举使用的情形:在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。例如星期一到星期日七个数据元素组成了一周的“数据集”…
接下来,我们在代码中实际的操作一下枚举的使用:
1.普通形式
这是最基础的枚举写法,使用的时候,直接调用即可:
2.添加属性和方法的枚举写法
这种类型的枚举,可以在枚举的getDay()方法中添加默认的参数值。使用方法如下:
3.实现带有构造器的枚举
注意的是:通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错;赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错。
当给此枚举赋值的时候,那么这个value就是之前的值如:
4.带有抽象方法的枚举
使用的方式:
[b]测试的完整类:
OK,枚举的几种使用方式,及测试代码就到这了!如过有什么问题,请留言说明,一起讨论学习!谢谢!
每天进步一点点,时间会让你变成巨人!!!
愉快的周一,哈哈!周六在家安装了VmPlayer 和Ubuntu,下载了最新的FFmpeg-3.3.2编译一把,然后用android Studio小小的运行了一下,嗯!还不错,终于弥补了之前做音视频编译时作为“伸手党”耻辱。当然,也只是编译出了arm架构的so包,也只是简单模仿网上大神,也只是简单的实现了小功能,等有些问题搞明白了,再写关于编译和使用FFmpeg的博客(感觉已经入坑了,不过有了久违的成就感!哈哈…)。
好了,进入正题。话说,我们为啥药使用枚举呢?
在JDK1.5之前,我们定义常量都是:
public static final ...
想想,如果一个逻辑功能稍微复杂点的类中,再如果常量比较多的,并且大多时候,我们用一组常量来判断某种状态功能的不同情况的,当这种情况状态比较多的时候,大量的静态常量会导致程序的代码量臃肿,并且可读性差,所以有了枚举,就可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。相应的,在JDK1.6,switch语句也添加了对枚举的响应判断,于是这个体系也得到了相应的完善。
枚举使用的情形:在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。例如星期一到星期日七个数据元素组成了一周的“数据集”…
接下来,我们在代码中实际的操作一下枚举的使用:
1.普通形式
/** * * @author TCX * */ public enum WeekdaysEnum1{ Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday; }
这是最基础的枚举写法,使用的时候,直接调用即可:
//获取枚举对象 WeekdaysEnum1 day1=WeekdaysEnum1.Saturday; //当前枚举名称 String str1="当前是枚举类型一:"+day1.name(); //当前枚举的索引 str1=" 索引为:"+day1.ordinal(); //枚举长度 str1=" 长度为:"+WeekdaysEnum1.values().length; //遍历枚举 for(WeekdaysEnum1 days:WeekdaysEnum1.values()){ str1=str1+days.name()+" "; } content.setText(str1);
2.添加属性和方法的枚举写法
/** * 枚举像普通的类一样可以添加属性和方法,可以为它添加静态和非静态的属性或方法 * @author TCX * */ public enum WeekdaysEnum2{ Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday; private final static String position = "1"; public static WeekdaysEnum2 getDay() { if ("1".equals("1")) return Monday; else return Tuesday; } }
这种类型的枚举,可以在枚举的getDay()方法中添加默认的参数值。使用方法如下:
WeekdaysEnum2 day2=WeekdaysEnum2.Saturday; //当前枚举名称 String str2="当前是枚举类型二:"+WeekdaysEnum2.getDay(); //当前枚举的索引 str2=" 索引为:"+day2.ordinal(); //枚举长度 str2=" 长度为:"+WeekdaysEnum2.values().length; for(WeekdaysEnum2 days:WeekdaysEnum2.values()){ str2=str2+days.name()+" "; } content.setText(str2);
3.实现带有构造器的枚举
注意的是:通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错;赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错。
/** * 实现带有构造器的枚举 * @author TCX * */ public enum WeekdaysEnum3{ Monday("1"),Tuesday("2"),Wednesday("3"),Thursday("4"),Friday("5"),Saturday("6"),Sunday("7"); private final String value; //构造器默认也只能是private, 从而保证构造函数只能在内部使用 WeekdaysEnum3(String value) { this.value = value; } public String getValue() { return value; } }
当给此枚举赋值的时候,那么这个value就是之前的值如:
public WeekdaysEnum3 getCurrentDay(){ return WeekdaysEnum3.Monday; } .... //接着调用 getCurrentDay().getValue();//猜猜打印的结果是啥。哈哈
4.带有抽象方法的枚举
/** * 带有抽象方法的枚举 * @author TCX * */ public enum WeekdaysEnum4 { Monday { public String getName(){ return "周一"; } }, Tuesday { public String getName(){ return "周二"; } }, Wednesday { public String getName(){ return "周三"; } }, Thursday { public String getName(){ return "周四"; } }, Friday { public String getName(){ return "周五"; } }, Saturday { public String getName(){ return "周六"; } }, Sunday { public String getName(){ return "周日"; } }; public abstract String getName(); }
使用的方式:
WeekdaysEnum4 day4=WeekdaysEnum4.Wednesday; //当前枚举名称 String str4="当前是枚举类型四:"+day4.getName(); //当前枚举的索引 str4=" 索引为:"+day4.ordinal(); //枚举长度 str4=" 长度为:"+WeekdaysEnum4.values().length; for(WeekdaysEnum4 days:WeekdaysEnum4.values()){ str4=str4+days.getName()+" "; } content.setText(str4);
[b]测试的完整类:
package com.tian.threadtestdemo.utils; /** * 枚举测试基类 * * @author TCX * */ public class EnumTest { /** * * @author TCX * */ public enum WeekdaysEnum1{ Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday; } /** * 枚举像普通的类一样可以添加属性和方法,可以为它添加静态和非静态的属性或方法 * @author TCX * */ public enum WeekdaysEnum2{ Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday; private final static String position = "1"; public static WeekdaysEnum2 getDay() { if ("1".equals("1")) return Monday; else return Tuesday; } } /** * 实现带有构造器的枚举 * @author TCX * */ public enum WeekdaysEnum3{ Monday("1"),Tuesday("2"),Wednesday("3"),Thursday("4"),Friday("5"),Saturday("6"),Sunday("7"); //通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错 //赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错 private final String value; //构造器默认也只能是private, 从而保证构造函数只能在内部使用 WeekdaysEnum3(String value) { this.value = value; } public String getValue() { return value; } } /** * 带有抽象方法的枚举 * @author TCX * */ public enum WeekdaysEnum4 { Monday { public String getName(){ return "周一"; } }, Tuesday { public String getName(){ return "周二"; } }, Wednesday { public String getName(){ return "周三"; } }, Thursday { public String getName(){ return "周四"; } }, Friday { public String getName(){ return "周五"; } }, Saturday { public String getName(){ return "周六"; } }, Sunday { public String getName(){ return "周日"; } }; public abstract String getName(); } }
OK,枚举的几种使用方式,及测试代码就到这了!如过有什么问题,请留言说明,一起讨论学习!谢谢!
每天进步一点点,时间会让你变成巨人!!!
相关文章推荐
- 高阶Java枚举类型enum使用详解
- java enum(枚举)使用详解 + 总结
- java枚举使用详解
- java enum(枚举)使用详解 + 总结
- java枚举使用详解
- java枚举使用详解
- Java枚举使用详解
- java枚举使用详解
- java枚举使用详解
- java enum(枚举)使用详解 + 总结
- java枚举使用详解
- java enum(枚举)使用详解 + 总结
- java枚举使用详解
- java枚举使用详解
- java枚举使用详解
- java 枚举使用详解
- java enum(枚举)使用详解 + 总结
- java enum(枚举)使用详解 + 总结
- java枚举使用详解
- JAVA枚举使用详解