Java (枚举) Enum 详解

枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。

Java 枚举类使用 enum 关键字来定义,各个常量使用逗号" , "来分割,结尾使用分号" ; "结束。

在类外部定义

// A simple enum example where enum is declared
// outside any class (Note enum keyword instead of
// class keyword)

enum Color {
	RED,
	GREEN,
	BLUE;
}

public class Test {
	// Driver method
	public static void main(String[] args)
	{
		Color c1 = Color.RED;
		System.out.println(c1);
	}
}

输出:

RED

在类内部定义

// enum declaration inside a class.

public class Test {
	enum Color {
		RED,
		GREEN,
		BLUE;
	}

	// Driver method
	public static void main(String[] args)
	{
		Color c1 = Color.RED;
		System.out.println(c1);
	}
}

输出:

RED

  • 枚举中的第一行应该是常量列表,然后是其他内容,如方法、变量和构造函数。
  • 根据Java命名约定,建议我们用全大写字母命名常量

枚举类

enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Serializable 和 java.lang.Comparable 两个接口。

values(), valueOf(),compareTo() 和 ordinal()方法位于 java.lang.Enum 类中:

values()

 values( ) 方法可以将枚举的所有成员以数组形式返回,也可以通过该方法获取枚举类型的成员。

package test001;

public class test002 {
    public static void main(String[] args) {
//        Season[] nums = Season.values();
        for (Season num:Season.values()) {
            System.out.println(num);
        }
    }
}
enum Season{
//    SPRING,SUMMER,AUTUMN,WINDAY;
    SPRING("春天"),SUMMER("夏天"),AUTUMN("秋天"),WINDAY("冬天");
    private String name;
    private Season(String name){
        this.name=name;
    }

    @Override
    public String toString() {
        return name;
    }
}

运行结果:

春天

夏天

秋天

冬天

valueOf

public static <T extends Enum<T>> T valueOf(Class<T> enumType,
                                            String name)

返回带指定名称的指定枚举类型的枚举常量。名称必须与在此类型中声明枚举常量所用的标识符完全匹配。(不允许使用额外的空白字符。)

参数:

enumType - 要从中返回常量的枚举类型的 Class 对象

name - 要返回的常量名称

返回:

带指定名称的指定枚举类型的枚举常量

抛出:

IllegalArgumentException - 如果指定枚举类型不包含指定名称的常量,或者指定类对象不表示枚举类型

NullPointerException - 如果 enumType 或 name 为空

从以下版本开始:

1.5

package test001;

public class test002 {
    public static void main(String[] args) {
            System.out.println(Season.valueOf("SPRING"));
    }
}
enum Season{

    SPRING("春天"),SUMMER("夏天"),AUTUMN("秋天"),WINDAY("冬天");
    private String name;
    private Season(String name){
        this.name=name;
    }

    @Override
    public String toString() {
        return name;
    }
}

运行结果:

春天

ordinal

public final int ordinal()

返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 大多数程序员不会使用此方法。它被设计用于复杂的基于枚举的数据结构,比如 EnumSetEnumMap

返回:

枚举常量的序数

package test001;

public class test002 {
    public static void main(String[] args) {

        for (Season num:Season.values()) {
            System.out.println(num+"索引为 "+num.ordinal());
        }
    }
}
enum Season{

    SPRING("春天"),SUMMER("夏天"),AUTUMN("秋天"),WINDAY("冬天");
    private String name;
    private Season(String name){
        this.name=name;
    }

    @Override
    public String toString() {
        return name;
    }
}

运行结果:

春天索引为 0
夏天索引为 1
秋天索引为 2
冬天索引为 3

compareTo

public final int compareTo(E o)

比较此枚举与指定对象的顺序。在该对象小于、等于或大于指定对象时,分别返回负整数、零或正整数。 枚举常量只能与相同枚举类型的其他枚举常量进行比较。该方法实现的自然顺序就是声明常量的顺序。

指定者:

接口 Comparable<E extends Enum<E>> 中的 compareTo

参数:

o - 要比较的对象。

返回:

负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。

package test001;

public class test002 {
    public static void main(String[] args) {
        Season[] nums = Season.values();

            System.out.println(Season.AUTUMN.compareTo(Season.SPRING));

    }
}
enum Season{
    SPRING,SUMMER,AUTUMN,WINDAY;

}

运行结果:

2


enum实现接口

使用enum关键字后,就不能再继承其它类了,因为enum会隐式继承Enum,而Java是单继承机制

枚举类和普通类一样,可以实现接口,如下形式:

enum 类名 implements 接口1,接口2{ }

package test001;

public class test002 {
    public static void main(String[] args) {
        Music.CLASSICMUSIC.playing();
    }
}
interface IPlaying {
   public void playing();
}
enum Music implements IPlaying{
    CLASSICMUSIC;

    public void playing(){
        System.out.println("播放音乐");
    }

}

运行结果:

播放音乐

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java码蚁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值