Java中的枚举类详讲
来源:互联网 发布:iphone 软件开关效果 编辑:程序博客网 时间:2024/06/16 03:02
枚举类型是JDK5.0的新特征。Sun引进了一个全新的关键字enum来定义一个枚举类。下面就总结一下自己对枚举类的一点看法:
1.枚举类可以实现一个或多个接口enum继承了java.lang.Enum
2.构造器要用private修饰,缺省方式就是private修饰的。
3.这个类的所有可能的实例都要使用public static final属性来保存
从某种程度上看enum和class和interface的用法大致相似!!
public enum SeasonEnum{ SPRING,SUMMER,FAIL,WINTER; ......}
就如(枚举类的实例是已经定义的枚举类型,不能随便通过new来创建另外的枚举对象。)
就如下面,他们前面都是省略了public static final,而且必须放在第一行
SPRING,SUMMER,FAIL,WINTER
enum SeasonEnum{ SPRING,SUMMER,FAIL,WINTER;}public class TestEnum { public void judge(SeasonEnum s){ switch(s) { case SPRING: System.out.println("11111"); break; case SUMMER: System.out.println("22222"); break; case FAIL: System.out.println("33333"); break; case WINTER: System.out.println("44444"); break; } } public static void main(String[] args) { for(SeasonEnum s:SeasonEnum.values()) { System.out.println(s); } new TestEnum().judge(SeasonEnum.SPRING); }}
这就是枚举类的一个简单的例子。values方法就是返回枚举类SeasonEnum的实例并通过迭代循环输出实例
public enum Gender{ //此处的枚举值必须调用对应的构造器来创建 MALE("男"),FEMALE("女"); private final name; private Gender(String name) { this.name=name; } public String getNmae() { return this.name; }}
在枚举类中列出枚举值时,实际上就是调用构造器创建枚举类对象,只是这里无需使用new关键字,也无需显示调用构造器。前面列出的枚举值时无需传入参数,甚至无需使用括号,仅仅前面的枚举类包含无参数的构造器。实现接口的枚举类:
枚举类可以实现一个或多个接口。与普通类实现一个或多个接口是一样的,既要实现该接口所包含的方法,例如:
public interface GenderDesc{ void info();}
下面的Gender枚举类就要实现info()该方法:
public enum Gender implements GenderDesc{ //枚举类中的其他的方法.... public void info() { //具体的代码..... }}
你可能会发现枚举类实现接口也不过如此,与普通类实现接口完全一样,使用implements实现接口里包含的抽象方法.但是枚举值实现该方法时,代码如下:
public enum Gender implements GenderDesc{ //此处的枚举值必须调用对应的构造器来创建 MALE("男") //在花括号部分实际上是一个类体部分 { public void info() { System.out.println("这个枚举值代表男性"); } } FEMALE("女") { public void info() { System.out.println("这个枚举值代表女性"); } }}
从代码上可以看见花括号实际上就是一个类体部分,在这种情况下,当创建MALE,FEMALE枚举值时,并不直接创建了Gender枚举类的实例,而是相当于创建Gender的匿名子类的实例。 其实就和匿名内部类语法大致相似,只是它依然是枚举类的匿名内部类子类
包含抽象方法的的枚举类:
假设有一个Operation枚举类,它的四个枚举值PULS,MINUS,TIMES,DIVIDE分别代表加减乘除
public enum Operation{ PULS,MINUS,TIMES,DIVIDE; //为枚举类定义一个方法,用于实现不同的运算 double eval(double x,double y) { switch(this) { case PULS: return x+y; break; case MINUS: return x-y; break; case TIMES: return x*y; break; case DIVIDE: return x/y; default: return 0; break; } }}另外一种方式:
public enum Operation{ PULS { public double eval(double x,double y) { return x+y; } },//注意这个逗号 MINUS { public double eval(double x,double y) { return x-y; } }, TIMES { public double eval(double x,double y) { return x*y; } }, DIVIDE { public double eval(double x,double y) { return x/y; } };//注意这个分号 //为枚举类定义一个抽象方法,这个抽象方法不同的枚举值提供不同的实现 public static void main(String [] args) { System.out.println(Operation.DIVIDE.eval(2,1));
//.... }}编译这个程序会生成5个class文件,4个匿名内部子类和一个Operation类.
而且枚举类里面定义抽象方法无需显示使用abstract关键字
补充:点击打开链接
0 0
- Java中的枚举类详讲
- Java中的枚举类型
- java中的枚举
- Java中的枚举
- Java中的枚举
- java 中的enum(枚举)
- java中的枚举
- Java中的枚举类型
- Java 中的枚举
- Java中的枚举类型
- java中的枚举
- Java中的枚举
- JAVA中的枚举类
- java中的枚举
- java中的枚举类型
- Java中的枚举
- Java中的枚举
- java中的枚举
- Android源代码下载过程中无法下载repo的解决方法
- Android APK 签名比对
- 二叉树的查找设计
- 题目1035:找出直系亲属
- 如何利用Python和win32编程避免重复性体力劳动(三)——文本框操作:WM_GETTEXT 和WM_SETTEXT
- Java中的枚举类详讲
- 程序员学英语三部曲
- UITableView模拟聊天界面
- ASP:TextBox 只允许输入数字
- 二维几何基础
- Hive文件的导入与导出
- Langford Pairing
- 没有非空索引情况下段头块损坏的恢复
- 43 java