一、什么是枚举
值类型的一种特殊形式,它从 System.Enum 继承,并为基础基元类型的值提供备用名称。枚举类型有名称、基础类型和一组字段。基础类型必须是一个内置的有符号(或无符号)整数类型(如 Byte、Int32 或 UInt64)。字段是静态文本字段,其中的每一个字段都表示常数。所使用的语言给每个字段都分配一个基础类型的特定值。JDK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。
枚举类型在C#或C++,java,VB等一些计算机编程语言中是一种基本数据类型而不是构造数据类型,而在C语言等计算机编程语言中是一种构造数据类型
[1] 。它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
枚举可以根据Integer、Long、Short或Byte中的任意一种数据类型来创建一种新型变量。这种变量能设置为已经定义的一组之中的一个,有效地防止用户提供无效值。该变量可使代码更加清晰,因为它可以描述特定的值。
二、枚举的使用
1、枚举的定义和简单访问
package com.test; public class EnumProgram { //获得枚举的常量 Signal number = Signal.FOUR; int n = 0; //定义一个方法 public void calculation(){ switch (number){ case ONE: n=1; break; case TWO: n=2; break; case Three: n=3; break; case FOUR: n=4; break; } } public static void main(String[] args) { EnumProgram en = new EnumProgram(); System.out.println(en.n); en.calculation(); System.out.println(en.n); System.out.println(Signal.Three); } } //创建一个枚举,里面放了 ONE,TWO,Three,FOUR 四个常量 enum Signal{ ONE,TWO,Three,FOUR }
结果:
2、向枚举中添加方法
package com.test; public class EnumProgram { public static void main(String[] args) { //使用 System.out.println(Color.BULE.getName()); System.out.println(Color.BULE.getIndex()); System.out.println(Color.getColorName(1)); System.out.println(Color.getColorIndex("绿色")); } } //创建一个枚举 enum Color{ RED("红色",1),BULE("蓝色",2),GREEN("绿色",3),WHITE("白色",4); private String name; private int index; //构造函数 private Color(String name,int index){ this.name=name; this.index=index; } //枚举方法 public static String getColorName(int index){ for(Color c : Color.values()){ if(c.getIndex()==index){ return c.getName(); } } return null; } //枚举方法 public static int getColorIndex(String name){ for(Color c : Color.values()){ if(c.getName()==name){ return c.getIndex(); } } return -1; } 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; } }
结果:
3、枚举类继承接口
package com.test; public class EnumProgram { public static void main(String[] args) { //使用 Color.BULE.print(); } } //定义一个接口 interface FunRea{ void print(); //定义一个方法 } //创建一个枚举,继承接口 enum Color implements FunRea{ RED("红色",1),BULE("蓝色",2),GREEN("绿色",3),WHITE("白色",4); private String name; private int index; //构造函数 private Color(String name,int index){ this.name=name; this.index=index; } //实现接口的方法 @Override public void print() { System.out.println(this.name+" : "+this.index); } 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; } }
结果: