Java枚举类的简单使用

参考:
https://www.cnblogs.com/zhanqing/p/11076646.html

关键字enum

Java中,枚举类型使用关键字enum进行声明,它是一种特殊的类。
通过关键字enum创建的枚举类型,在编译后事实上也是一个类类型,而且该类继承自java.lang.Enum类,同时编译器会将枚举类标记为final类。由于Java并不是支持多继承,所以enum声明的枚举类不能再继承其他类。

enum NotPossible extends Pet{} // 不正确

实际上,在Java中,多继承的功能可以通过多实现来实现,即实现一个或多个接口。

相关细节

Java要求必须先定义枚举实例(枚举常量)。如果在定义枚举实例之前定义了任何方法或属性,那么编译会报错。
如果打算在枚举类中定义(或重写)方法,则需要在枚举实例序列的最后添加分号“;”。
只能在枚举类的内部使用其构造器创建枚举实例。事实上,构造器只在构造枚举实例时被调用,一旦枚举类的定义结束,编译器就不允许我们再使用其构造器来创建任何实例了,所以一般将枚举类的构造器定义为private,当然即使我们使用其他权限修饰符定义构造器,也无法在外部生成枚举实例,这是由编译器保证的
除此之外,我们也可以自定义构造函数。在声明枚举实例的同时给构造函数传入实参,这样便可以使用实参,添加对每个枚举实例的描述。然后使用重写的toString(),返回这个描述信息。而默认的toString()方法只能返回枚举实例的名字。
在继承自Enum类的方法中,只有toString()不是final的。换句话说,枚举类只能重写(覆盖)toString()方法。但是可以向枚举类中添加方法。

枚举类的相关方法

比较2个枚举常量是否相等,可以使用==,也可以使用equals方法。
name() : 返回枚举实例声明时的名字,这与使用默认的toString()方法效果相同。
values() : 返回一个包含所有枚举实例的数组,其类型为枚举类。
ordinal(): 返回枚举实例对应的位置(位置从0开始)
int compareTo(E other): 用来比较如果枚举实例出现在Other之前,则返回一个负值;如果this=other,则返回0;否则返回正值。枚举常量的出现次序在enum声明中给出。

代码示例

获取枚举实例

	// 获取枚举实例的方法1
	ColorEnum s1 = ColorEnum.RED;	
	// 获取枚举实例的方法2
	ColorEnum s2 = Enum.valueOf(ColorEnum .class, "WHITE");

获取枚举实例的位置

枚举实例的位置,同定义时的顺序一致,位置从0开始计数。

	// 获取枚举实例的位置【从0开始】
	int index = s2.ordinal();

比较2个枚举实例

	int resBe = s1.compareTo(s2);
	System.out.println("resBe = "+resBe); 

比较2个枚举实例是否相等

	if(s2==s1){System.out.println("相等");}
	else{ System.out.println("不相等");}
	// 使用equals方法
	if(s2.equals(s1)){System.out.println("相等");}
	else{ System.out.println("不相等");}

获取全部枚举实例

可以使用values方法获取全部的枚举实例。

	ColorEnum [] arrs = ColorEnum.values();
	// 打印所有枚举实例
	for(ColorEnum s:arrs)
	{
		System.out.println(s.toString());
	}

不重写toString方法

在原始情况下,即没有重写toString方法时,枚举类的name方法和toString方法返回的结果是一样的。

主函数

public class ColorEnumTest {
	public static void main(String[] args) {
		// 获得枚举实例
		ColorEnum s1 = ColorEnum.RED;
		// 得到枚举实例的描述
		System.out.println(s1.toString());
		System.out.println(s1.name());
	}
}

ColorEnum 类

public enum ColorEnum {
	// 枚举实例
	 RED,GREEN,WHITE,YELLOW;
}

重写toString方法添加对枚举实例的描述

主函数

可以看到,ColorEnum枚举类的构造函数被调用了4次,正好对应4个枚举实例。也就是说每生成1个枚举实例,编译器都会自动调用该枚举类的构造函数。

public class ColorEnumTest {
	public static void main(String[] args) {
		// 获得枚举实例
		ColorEnum s1 = ColorEnum.RED;
		// 使用重写的toString方法得到枚举实例的描述
		System.out.println(s1.toString());
		System.out.println(s1.name());
	}
}

ColorEnum 类

public enum ColorEnum {
	// 枚举实例,生成实例的时候调用了构造器,括号内都是传给构造器的实参
    RED("红色",1),GREEN("绿色",2),WHITE("白色",3),YELLOW("黄色",4);
    // 成员变量
    private String name;
    private int index;
    // 私有的构造方法
    private ColorEnum(String name,int index) {
    	System.out.println("Color的构造方法");
        this.name = name;
        this.index = index;
    }
    // 重写toString方法
    @Override
    public String toString() {
        return this.index + "--" + this.name;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值