Java 枚举(enum)的简单介绍
枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。本质就是,一个类里定义几个静态变量,每个变量都是这个类的实例。
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。
概念
定义:
1)被enum关键字修饰的类型就是枚举类型.
2)如果枚举不添加任何方法,枚举值默认为从0开始的有序数值
实例:
enum Color
{
RED, GREEN, BLUE;
}
public class Test
{
// 执行输出结果
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
}
}
输出结果:RED
优点:
将常量组织起来,进行统一管理.
本质:
枚举的本质是java.lang.Enum的子类.
方法
values()
返回enum实例的数组,而且该数组的元素是保持在enum中声明的顺序.
enum Color
{
RED, GREEN, BLUE;
}
public class EnumDemo01 {
// 执行输出结果
public static void main(String[] args)
{
Color c1[] = Color.values();
for(Color k:c1){
System.out.print(k+".");
}
}
}
输出结果:
RED.GREEN.BLUE.
name()
返回实例名.
enum Color
{
RED, GREEN, BLUE;
}
public class EnumDemo01 {
// 执行输出结果
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1.name());
}
}
结果:RED
ordinal()
返回实例声明时的次序,从0开始.
enum Color
{
RED, GREEN, BLUE;
}
public class EnumDemo01 {
// 执行输出结果
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1.ordinal());
System.out.println(Color.BLUE.ordinal());
}
}
结果:
0
2
getDeclaringClass()
返回实例所属的enum类型
enum Color
{
RED, GREEN, BLUE;
}
public class EnumDemo01 {
// 执行输出结果
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1.getDeclaringClass());
}
}
结果:class Color
equals()
1)判断是否是同一个对象.
2)也可以使用’=='来比较enum实例
enum Color
{
RED, GREEN, BLUE;
}
public class EnumDemo01 {
// 执行输出结果
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1.equals(Color.RED));
System.out.println(c1.equals(Color.BLUE));
}
}
输出结果:
true
false
特性
1)除了不能继承,基本上可以把enum看成一个常规的类.
2)java中不允许使用 = 为枚举常量赋值
3)enum可以通过方法来显示赋值
4)enum可以添加普通方法、静态方法、抽象方法、构造方法
enum Color
{
RED("红色"){
public String getColor() {
return "红色";
}
},
GREEN("绿色"){
public String getColor(){
return "绿色";
}
},
BLUE("蓝色"){
public String getColor(){//必须重写抽象方法
return "蓝色";
}
};
private String name;
private Color(String name){//构造方法
System.out.println("对象已经被创造");
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("对象已经被创造");
this.name = name;
}
public abstract String getColor();
public static void print(){
System.out.println("这是一个静态方法");
}
public void commonly() {//设置普通方法
System.out.println("这是一个普通方法");
}
}
public class EnumDemo01 {
// 执行输出结果
public static void main(String[] args)
{
Color c = Color.RED;
c.commonly();//调用普通方法
c.print();//调用静态方法
System.out.println(c.getColor());//重写抽象方法.
}
}
运行结果:
对象已经被创造
这是一个普通方法
这是一个静态方法
红色
5)枚举可以实现接口
6)枚举不可以继承,因为它已经继承了Enum类,根据java单继承的限制,所以不能再继承.
工具类
EnumSet
是枚举类型的高性能Set实现。它要求放入它的枚举常量必须属于同-枚举类型。
EnumMap
是专门为枚举类型量身定做的Map实现。虽然使用其它的Map实现(如HashMap )也能完成枚举类型实例到值得映射,但是使用EnumMap会更加高效:它只能接收同一枚举类型的实例作为键值,并且由于枚举类型实例的数量相对固定并且有限,所以EnumMap使用数组来存放与枚举类型对应的值。这使得EnumMap的效率非常高。
详细相关内容可以查看以下博客
https://blog.csdn.net/superfjj/article/details/105898895