JAVA中枚举的简单介绍

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值