枚举初步
来源:互联网 发布:redis mysql完美结合 编辑:程序博客网 时间:2024/06/06 17:31
枚举类型的类具有个数有限且固定的实例,比如以一桌麻将的视角来看,只能有四个玩家,并且不许中途换场(final)。
enum 是JDK1.5后声明的关键字,令人惊奇的是在JDK1.5前enum连保留字也不是,所以有些残留的程序会将enum作为变量命使用,如果使用1.5以后的JDK将导致程序的错误,最著名的就是tomcat4,其中有大量声明为enum的变量。
不适用enum如何自己实现一个枚举类呢?
枚举类应该有以下特点。
(1) 实例是固定且有限的。
(2) 特点(1)决定了其构造器必须是私有的
(3) 可以访问它的实例。
public class Play { private String name;private long money;private Play(String name, long money) { this.name = name; this.money = money; }private final static Play PLAY_1 = new Play("宋三思", 60L);private final static int PLAY1 = 1;private final static Play PLAY_2 = new Play("刘二狗", 60000L);private final static int PLAY2 = 2;private final static Play PLAY_3 = new Play("赖一炮", 600000L);private final static int PLAY3 = 3;private final static Play PLAY_4 = new Play("五零光", 60000L);private final static int PLAY4 = 4;public static Play getPlay(int num) {switch (num) { case PLAY1: return PLAY_1; case PLAY2: return PLAY_2; case PLAY3: return PLAY_3; case PLAY4: return PLAY_4; default: return null; }}public void in () {System.out.println(this.name + "进入了游戏" +"\n他有"+this.money+"金币");}public static void main(String[] args) {Play.getPlay(1).in();}}
有了enum关键字就不用再手动创建枚举类型了。
枚举类是一个特殊的类,从这句话可以得到俩条信息。
(1) 它终究还是一个类:所以它可以有属性、方法和构造器。
(2) 它是特殊的:根据枚举类其实例时固定的,所以其构造器必须是私有的。
public enum Session { SPRING("春"),SUMMER("夏"),FALL("秋"),WINTER("东"); private Session(String name) { this.name = name; } private String name; public void say() { System.out.println("我是" + this.name + "天"); }}
初看语法似乎有些别扭,当为枚举类型声明了私有构造器后它的实例必须显示用它来初始化。
SPRING("春") 等价于 Session SPRING = new Session(“春”)
枚举类实现接口的实例
public interface Info { public void info();}public enum Session implements Info{ SPRING("春") { @Override public void info() { System.out.println("我是春天的实例"); } }; private Session(String name) { this.name = name; } private String name; public void say() { System.out.println("我是" + this.name + "天"); }@Overridepublic void info() {System.out.println("我是季节的实例");}}SPRING("春") { @Override public void info() { System.out.println("我是春天的实例"); } };
这个语法似乎又有点别扭,实际上它相当于
Session SPRING = new Session(“春”) {@Override public void info() { System.out.println("我是春天的实例"); }}
也就是此时生成的并不是Session实例,而是Session的子类的实例,并且这里重写了info方法
- 枚举初步
- 枚举初步认识
- 枚举初步认识
- 枚举类型与结构体初步
- JAVA 枚举类的初步理解
- 关于java枚举类型的初步了解
- 四、枚举,递推、迭代法初步学习
- 13:枚举初步使用以及using名称空间
- 初步
- 2013级C++第1周(春)项目——枚举类型与结构体初步
- java入门学习(13)—枚举类定义及使用初步
- 算法初步--求最大子数组和【暴力|优化枚举|贪心 】求解
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- android颜色对应的xml配置值
- SUN系统维护命令大全 ZT
- rest上传图片和下载图片(c#和c++)
- AutoFlowchart新框架基本完成!
- 最近觉得很是无奈啊
- 枚举初步
- c# 字符串处理
- C语言修饰词之violate
- VS2012 远程调试
- 关于ASP.NET页面打印技术的总结
- Linux 下使用mount命令挂载CDROM
- Oracle支持的外部过程
- \r与\n解释
- Oracle Rman 命令详解(List report backup configure)