DK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。

用法一:常量

在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

Java代码  
  1. public enum Color {
  2. RED, GREEN, BLANK, YELLOW
  3. }
public enum Color {RED, GREEN, BLANK, YELLOW
}

用法二:switch

JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

Java代码  
  1. enum Signal {
  2. GREEN, YELLOW, RED
  3. }
  4. public class TrafficLight {
  5. Signal color = Signal.RED;
  6. public void change() {
  7. switch (color) {
  8. case RED:
  9. color = Signal.GREEN;
  10. break;
  11. case YELLOW:
  12. color = Signal.RED;
  13. break;
  14. case GREEN:
  15. color = Signal.YELLOW;
  16. break;
  17. }
  18. }
  19. }
enum Signal {GREEN, YELLOW, RED
}
public class TrafficLight {Signal color = Signal.RED;public void change() {switch (color) {case RED:color = Signal.GREEN;break;case YELLOW:color = Signal.RED;break;case GREEN:color = Signal.YELLOW;break;}}
}

用法三:向枚举中添加新方法

如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。

Java代码  
  1. public enum Color {
  2. RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
  3. // 成员变量
  4. private String name;
  5. private int index;
  6. // 构造方法
  7. private Color(String name, int index) {
  8. this.name = name;
  9. this.index = index;
  10. }
  11. // 普通方法
  12. public static String getName(int index) {
  13. for (Color c : Color.values()) {
  14. if (c.getIndex() == index) {
  15. return c.name;
  16. }
  17. }
  18. return null;
  19. }
  20. // get set 方法
  21. public String getName() {
  22. return name;
  23. }
  24. public void setName(String name) {
  25. this.name = name;
  26. }
  27. public int getIndex() {
  28. return index;
  29. }
  30. public void setIndex(int index) {
  31. this.index = index;
  32. }
  33. }
public enum Color {RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);// 成员变量private String name;private int index;// 构造方法private Color(String name, int index) {this.name = name;this.index = index;}// 普通方法public static String getName(int index) {for (Color c : Color.values()) {if (c.getIndex() == index) {return c.name;}}return null;}// get set 方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getIndex() {return index;}public void setIndex(int index) {this.index = index;}
}

用法四:覆盖枚举的方法

下面给出一个toString()方法覆盖的例子。

Java代码  
  1. public enum Color {
  2. RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
  3. // 成员变量
  4. private String name;
  5. private int index;
  6. // 构造方法
  7. private Color(String name, int index) {
  8. this.name = name;
  9. this.index = index;
  10. }
  11. //覆盖方法
  12. @Override
  13. public String toString() {
  14. return this.index+"_"+this.name;
  15. }
  16. }
public enum Color {RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);// 成员变量private String name;private int index;// 构造方法private Color(String name, int index) {this.name = name;this.index = index;}//覆盖方法@Overridepublic String toString() {return this.index+"_"+this.name;}
}

用法五:实现接口

所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。

Java代码  
  1. public interface Behaviour {
  2. void print();
  3. String getInfo();
  4. }
  5. public enum Color implements Behaviour{
  6. RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
  7. // 成员变量
  8. private String name;
  9. private int index;
  10. // 构造方法
  11. private Color(String name, int index) {
  12. this.name = name;
  13. this.index = index;
  14. }
  15. //接口方法
  16. @Override
  17. public String getInfo() {
  18. return this.name;
  19. }
  20. //接口方法
  21. @Override
  22. public void print() {
  23. System.out.println(this.index+":"+this.name);
  24. }
  25. }
public interface Behaviour {void print();String getInfo();
}
public enum Color implements Behaviour{RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);// 成员变量private String name;private int index;// 构造方法private Color(String name, int index) {this.name = name;this.index = index;}
//接口方法@Overridepublic String getInfo() {return this.name;}//接口方法@Overridepublic void print() {System.out.println(this.index+":"+this.name);}
}

用法六:使用接口组织枚举

Java代码  
  1. public interface Food {
  2. enum Coffee implements Food{
  3. BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
  4. }
  5. enum Dessert implements Food{
  6. FRUIT, CAKE, GELATO
  7. }
  8. }
public interface Food {enum Coffee implements Food{BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO}enum Dessert implements Food{FRUIT, CAKE, GELATO}
}

用法七:关于枚举集合的使用

java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。

关于枚举的实现细节和原理请参考:

参考资料:《ThinkingInJava》第四版

转载于:https://www.cnblogs.com/javaTest/archive/2011/10/11/2589598.html

总结几个经典的java陷阱给大家。相关推荐

  1. java 陷阱,java 中的陷阱。

    看了一段北风网的视频,总结几个经典的java陷阱给大家. 答案在博客中:http://blog.csdn.net/ol_beta/archive/2010/05/17/5598867.aspx 欢迎大 ...

  2. 2012 Java陷阱

    作为Apache软件基金会的成员之一,我对开源软件的立场倾向于支持更加自由的许可协议,例如Apache许可证 (v2.0), BSD, 或 MIT许可协议.我坚信应该鼓励企业都能够采用开源软件,让他们 ...

  3. 10 个经典的 Java 集合面试题,看你能否答得上来?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | evget.com/article/2014/ ...

  4. java经典50道_50道经典的JAVA编程题(41-45)

    50道经典的JAVA编程题(41-45),苦逼的程序猿,晚上睡不着了编程吧~今天坚持做10道题!发现编程能是我快乐...O(∩_∩)O哈哈~能平静我烦乱的心,剩下5道题留到考试完了再做吧!该睡觉了.. ...

  5. java陷阱常见面试题_Java常见陷阱

    java陷阱常见面试题 总览 Java是一种极简主义的语言,具有比其他语言故意更少的功能,尽管如此,Java仍然具有产生奇怪效果的边缘情况,甚至具有令人惊讶的效果的一些常见情况也会使您轻而易举. 如果 ...

  6. Java陷阱:内部类中的字段访问

    这本身不是一个"陷阱",而是一个值得了解的实现细节. 假设我有一个带有字段的内部类. 这样的字段对于封闭的类是可见的,但是以下哪种方法是访问它的最快方法? 注意! 我只在这里查看生 ...

  7. 质量不同的球java编程_荐非常经典的java编程题全集-共50题(1-10)...

    非常经典的java编程题 程序1:斐波那契数列问题 题目概述: 古典问题: 有一对兔子,从出生第三个月起每月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多 ...

  8. Java陷阱一箩筐----面试题集

    Java陷阱一箩筐----面试题集 找工作要面试,有面试就有对付面试的办法.以下一些题目来自我和我朋友痛苦的面试经历,提这些问题的公司包括IBM, E*Trade, Siebel, Motorola, ...

  9. java me手机版,一个经典的 JAVA ME 手机程序入门级源码

    一个经典的 JAVA ME 手机程序入门级源码 一个由 Carol Hamer 写的比较有代表性的源码,作者全力推荐,尤其是对于没有 J2ME 开发经验的朋友.自己动手敲出以下贴出的 Hello.ja ...

最新文章

  1. 每个程序员都必须知道的 8 种数据结构
  2. 操作系统习题——(习题二)
  3. 构建线性表的c语言代码,数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码...
  4. 获取Python安装目录
  5. socket编程 —— 非阻塞socket (转)---例子已上传至文件中
  6. 日本「AI 鱼脸识别」项目,每分钟识别 100 条,有望让渔民不再“摸鱼”
  7. JavaScript高级程序设计
  8. 3.46 OrCAD软件怎么输出物料清单BOM表格?
  9. 组装计算机什么配置比较好,组装电脑什么配置好 组装电脑配置推荐
  10. 云服务器分割成虚拟主机销售,IDC行业为何兴起云虚拟主机业务
  11. 摄氏度与华氏度相互转换
  12. OpenCV基本函数学习
  13. 如何防止企业电子邮件外泄
  14. python random.round 修约方法 4舍6入5看齐,奇进偶不进
  15. 【JMeter】Jmeter分布式压测教程
  16. 什么是软件过程?为什么要使用软件过程?如何评价一个好的软件过程?
  17. teamviewer有linux安装教程,teamviewer linux版安装教程
  18. echarts省份地图
  19. ubuntu 17.10 wifi 网速慢的解决办法
  20. GAMES104 作业2-ColorGrading

热门文章

  1. python | 高效统计语言模型kenlm:新词发现、分词、智能纠错
  2. weblogic apache 整合 代理
  3. Android内存优化2 了解java内存分配 2
  4. 送给python新手关于pip用法和虚拟环境用法的介绍(英文)
  5. 向SourceView增加垂直行号标注
  6. C++:STL之vector,deque对比
  7. 运行python manage.py runserver报错现象、原因和解决办法
  8. JetBrains WebStorm 2017.1.2 和 IntelliJ Idea 2017 在线激活
  9. 词形变换和词干提取工具(英文)
  10. 配置 SQL Server 2005 以允许远程连接(服务器端)