一、枚举是什么?
Java是从JDK1.5开始,引入了这种新的类型——枚举(enum)。
其实枚举不是Java所特有的功能,在C++等其他编程语言中也一样存在。
但和其余编程语言相比,Java的枚举——enum更加强大,因为Java提供的枚举是完整的类,也就是说,我们可以随意添加成员变量和成员方法。
当然,Java的enum枚举也支持相互比较,也可以被序列化。
说了那么多,让我们先来了解一下Java的枚举。
二、枚举的基本用法 —— 浙江地级市列表
枚举是指由一组固定的常量组成的类型,使用enum关键字定义。比如下面浙江的地级城市:
1. enum ZheJiangCity{ 2. 杭州,宁波,温州,绍兴,湖州,嘉兴,金华,舟山,衢州,丽水; 3. }
一般来说,一个省内的地级市是固定的,不会发生太多变化。如果要在程序中经常使用到浙江的地级市,我们就可以定义Java的枚举类。
比如下面这样,可以直接调用枚举类的固定值。
1. public static void main(String[] args) { 2. System.out.println(ZheJiangCity.宁波); 3. }
注意:在枚举类中如果存在其他成员方法,则枚举变量列表最后要加上分号;
不过个人推荐不管有没有其他方法,都加上,这也是编程中一个良好的习惯。
刚刚说了,Java的枚举类中,可以添加成员方法,比如我在这重写一个取长度方法。
1. enum ZheJiangCity{ 2. 杭州,宁波,温州,绍兴,湖州,嘉兴,金华,舟山,衢州,丽水; 3. public static int length() { 4. return ZheJiangCity.values().length; 5. } 6. }
接着,就可以在测试方法中测试length()方法。
1. public static void main(String[] args) { 2. System.out.println(ZheJiangCity.length()); 3. }
总的来说,在Java编程中要善于使用枚举类,个人认为枚举类可以给我们带来三点好处
1. 可以让代码更容易维护,类似前端的正则表达式,保证变量都是正确、合法的值。
2. 方便Java编程时,输入指定数据。因为只要输入一个点,就可以弹出所有的值。
3. 使得代码更加直观,允许使用描述性的名称表示数据,使用更加方便。
三、枚举实际应用 —— 课堂点到
接下来是一个实际的应用,那就是课堂随机点到的小游戏,利用Java的枚举类,20行代码即可实现
首先创建一个枚举类——User,放入点到的姓名范围
1. enum User { 2. 张三,李四,王五,赵六,ZWZ_1号, 3. ZWZ_2号,ZWZ_3号,ZWZ_4号,ZWZ_5号,ZWZ_6号 4. ,ZWZ_7号,ZWZ_8号,ZWZ_9号,ZWZ_10号,ZWZ_11号 5. ,ZWZ_12号,ZWZ_13号,ZWZ_14号,ZWZ_15号,ZWZ_16号; 6. }
随机数需要Java的随机函数:Math.random() 来实现,该方法返回一个 0 ~ 1 的随机小数
我们将随机小数乘于枚举类变量长度,就可以得到0~len的一个随机浮点数
接着再使用Math.floor()方法向下取整,再强制转换为int整型,就实现了随机下标的功能
int randomNum = (int)Math.floor(Math.random()*User.values().length);
接着再从枚举类中遍历,找到第n个元素,返回即可
1. public static User choose() { 2. int randomNum = (int)Math.floor(Math.random()*User.values().length); 3. for(User l : User.values()) { 4. randomNum --; 5. if(randomNum < 0) { 6. return l; 7. } 8. } 9. return null; 10. }
完整的代码:
1. package cn.ypc; 2. 3. public class EnumTest2 { 4. public static void main(String[] args) { 5. int time = 10; 6. for(int i = 0 ; i < time ; i ++) { 7. System.out.println("The " + i + " time " + User.choose() + " is lucky"); 8. } 9. } 10. } 11. enum User { 12. 张三,李四,王五,赵六,ZWZ_1号, 13. ZWZ_2号,ZWZ_3号,ZWZ_4号,ZWZ_5号,ZWZ_6号 14. ,ZWZ_7号,ZWZ_8号,ZWZ_9号,ZWZ_10号,ZWZ_11号 15. ,ZWZ_12号,ZWZ_13号,ZWZ_14号,ZWZ_15号,ZWZ_16号; 16. 17. public static User choose() { 18. int randomNum = (int)Math.floor(Math.random()*User.values().length); 19. for(User l : User.values()) { 20. randomNum --; 21. if(randomNum < 0) { 22. return l; 23. } 24. } 25. return null; 26. } 27. }
运行几次程序发现,课堂点名结果是随机生成的
当然 Java 的 Enum 应用远不止这个,还有很多等着我们去学习。
总之使用枚举类,可以容易的限制程序只采用指定的某一个有效值,确保信息正确有效。