总结几个经典的java陷阱给大家。
DK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。
用法一:常量
在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
- public enum Color {
- RED, GREEN, BLANK, YELLOW
- }
public enum Color {RED, GREEN, BLANK, YELLOW
}
用法二:switch
JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。
- 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 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 实例。
- 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;
- }
- }
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()方法覆盖的例子。
- 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;
- }
- //覆盖方法
- @Override
- public String toString() {
- return this.index+"_"+this.name;
- }
- }
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 不支持多继承,所以枚举对象不能再继承其他类。
- 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;
- }
- //接口方法
- @Override
- public String getInfo() {
- return this.name;
- }
- //接口方法
- @Override
- public void print() {
- System.out.println(this.index+":"+this.name);
- }
- }
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);}
}
用法六:使用接口组织枚举
- public interface Food {
- enum Coffee implements Food{
- BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
- }
- enum Dessert implements Food{
- FRUIT, CAKE, GELATO
- }
- }
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陷阱给大家。相关推荐
- java 陷阱,java 中的陷阱。
看了一段北风网的视频,总结几个经典的java陷阱给大家. 答案在博客中:http://blog.csdn.net/ol_beta/archive/2010/05/17/5598867.aspx 欢迎大 ...
- 2012 Java陷阱
作为Apache软件基金会的成员之一,我对开源软件的立场倾向于支持更加自由的许可协议,例如Apache许可证 (v2.0), BSD, 或 MIT许可协议.我坚信应该鼓励企业都能够采用开源软件,让他们 ...
- 10 个经典的 Java 集合面试题,看你能否答得上来?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | evget.com/article/2014/ ...
- java经典50道_50道经典的JAVA编程题(41-45)
50道经典的JAVA编程题(41-45),苦逼的程序猿,晚上睡不着了编程吧~今天坚持做10道题!发现编程能是我快乐...O(∩_∩)O哈哈~能平静我烦乱的心,剩下5道题留到考试完了再做吧!该睡觉了.. ...
- java陷阱常见面试题_Java常见陷阱
java陷阱常见面试题 总览 Java是一种极简主义的语言,具有比其他语言故意更少的功能,尽管如此,Java仍然具有产生奇怪效果的边缘情况,甚至具有令人惊讶的效果的一些常见情况也会使您轻而易举. 如果 ...
- Java陷阱:内部类中的字段访问
这本身不是一个"陷阱",而是一个值得了解的实现细节. 假设我有一个带有字段的内部类. 这样的字段对于封闭的类是可见的,但是以下哪种方法是访问它的最快方法? 注意! 我只在这里查看生 ...
- 质量不同的球java编程_荐非常经典的java编程题全集-共50题(1-10)...
非常经典的java编程题 程序1:斐波那契数列问题 题目概述: 古典问题: 有一对兔子,从出生第三个月起每月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多 ...
- Java陷阱一箩筐----面试题集
Java陷阱一箩筐----面试题集 找工作要面试,有面试就有对付面试的办法.以下一些题目来自我和我朋友痛苦的面试经历,提这些问题的公司包括IBM, E*Trade, Siebel, Motorola, ...
- java me手机版,一个经典的 JAVA ME 手机程序入门级源码
一个经典的 JAVA ME 手机程序入门级源码 一个由 Carol Hamer 写的比较有代表性的源码,作者全力推荐,尤其是对于没有 J2ME 开发经验的朋友.自己动手敲出以下贴出的 Hello.ja ...
最新文章
- 每个程序员都必须知道的 8 种数据结构
- 操作系统习题——(习题二)
- 构建线性表的c语言代码,数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码...
- 获取Python安装目录
- socket编程 —— 非阻塞socket (转)---例子已上传至文件中
- 日本「AI 鱼脸识别」项目,每分钟识别 100 条,有望让渔民不再“摸鱼”
- JavaScript高级程序设计
- 3.46 OrCAD软件怎么输出物料清单BOM表格?
- 组装计算机什么配置比较好,组装电脑什么配置好 组装电脑配置推荐
- 云服务器分割成虚拟主机销售,IDC行业为何兴起云虚拟主机业务
- 摄氏度与华氏度相互转换
- OpenCV基本函数学习
- 如何防止企业电子邮件外泄
- python random.round 修约方法 4舍6入5看齐,奇进偶不进
- 【JMeter】Jmeter分布式压测教程
- 什么是软件过程?为什么要使用软件过程?如何评价一个好的软件过程?
- teamviewer有linux安装教程,teamviewer linux版安装教程
- echarts省份地图
- ubuntu 17.10 wifi 网速慢的解决办法
- GAMES104 作业2-ColorGrading
热门文章
- python | 高效统计语言模型kenlm:新词发现、分词、智能纠错
- weblogic apache 整合 代理
- Android内存优化2 了解java内存分配 2
- 送给python新手关于pip用法和虚拟环境用法的介绍(英文)
- 向SourceView增加垂直行号标注
- C++:STL之vector,deque对比
- 运行python manage.py runserver报错现象、原因和解决办法
- JetBrains WebStorm 2017.1.2 和 IntelliJ Idea 2017 在线激活
- 词形变换和词干提取工具(英文)
- 配置 SQL Server 2005 以允许远程连接(服务器端)