枚举类的使用

目录

自定义类实现枚举

enum关键字实现枚举

注意事项:

enum的成员方法:

enum实现接口:


介绍:

1)枚举对应英文(enumeration,简写为enum)

2)枚举是一种常量的集合

3)可以理解为:枚举是一种特殊的类,里面只包含一组有限的特定的对象

枚举的两种实现方式:

a:自定义类实现枚举

b:使用enum关键字实现枚举

自定义类实现枚举

1、不需要提供setXxx方法,因为枚举对象值通常为只读

2、对枚举对象/属性使用 final + static 共同修饰,实现底层优化

3、枚举对象名通常使用全大写,常量的命名规范

4、枚举对象根据需要,也可以有多个属性

//	1、将构造器私有化,防止外部直接new新的对象
//	2、去掉setXxx方法,防止属性被修改
//	3、在类的内部直接创建固定对象
//	4、优化,可以加入final修饰符
class Season{
	
	private String name;
	private String desc;
	
//	定义四个对象
	public final static Season SPRING = new Season("春天","温暖");
	public final static Season SUMMER = new Season("夏天","炎热");
	public final static Season AUTUMN = new Season("秋天","凉爽");
	public final static Season WINTER = new Season("冬天","寒冷");
	
	private Season(String name, String desc) {
		super();
		this.name = name;
		this.desc = desc;
	}

	public String getName() {
		return name;
	}

	public String getDesc() {
		return desc;
	}

}

小结:

1)构造器私有化

2)本类内部创建需要的对象

3)对外暴露对象(通过对对象添加 public final static修饰符)

4)可以提供get方法,但不要提供set方法

enum关键字实现枚举

//	1、使用关键字enum替代class关键字
//	2、public static final Season SPRING = new Season("春天","温暖"); 
//	直接使用SPRING("春天","温暖");	进行替代常量名(实参列表)
//	3、如果有多个常量(对象).使用,进行间隔
//	4、使用关键字来实现枚举,要求将定义常量对象写在前面	
enum Season2{
	
	SPRING("春天","温暖"),SUMMER("夏天","炎热"), 
	AUTUMN("秋天","凉爽"),WINTER("冬天","寒冷");
	
	private String name;
	private String desc;
	
	private Season2(String name, String desc) {
		
		this.name = name;
		this.desc = desc;
	}

	public String getName() {
		return name;
	}
	public String getDesc() {
		return desc;
	}
	
}

注意事项:

A:当使用enum关键字进行开发一个枚举时,默认会继承Enum类(可以使用javap工具进行反编译证明)

B:传统的public static  final Season SPRING = new Season("春天","温暖");

  简化为 SPRING("春天","温暖");

C:如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略

D:当有多个枚举对象时,使用,进行间隔,最后结尾为一个分号

E:枚举对象必须放在枚举值的行首

enum的成员方法:

说明:使用enum关键字时,会隐式的继承Enum类,这样就能够使用Enum类的相关方法

public abstract class Enum <E extends Enum<E>> implements Comparable<E>,Serializable{ 

 }

主方法中使用Season2进行测试:

Season2 autumn = Season2.AUTUMN;
		
//		输出枚举对象名字
		System.out.println(autumn.name());//AUTUMN
//		输出该枚举对象的次序/编号,从零开始进行编号
		System.out.println(autumn.ordinal());//2
//		返回含义定义的所有枚举对象
		Season2 [] values = Season2.values();
		System.out.println("遍历取出枚举对象(增强for)");
		for(Season2 season : values) {//增强for循环
			System.out.println(season);
		}
//		SPRING
//		SUMMER
//		AUTUMN
//		WINTER
//		valueof:将字符串转换成枚举对象,要求字符串必须已有的常量名,否则报异常
//		流程为:
//		1、根据你输入的“AUTUMN”到Season2的枚举对象去查找
//		2、如果找到了,就返回,如果没找到,就报错
		Season2 season = Season2.valueOf("AUTUMN");
//		Season2 season = Season2.valueOf("AUTUMNXXX");会报错,因为在枚举类
//      中没有名为AUTUMNXXX的枚举对象 
		System.out.println("season = "+season);//season = AUTUMN
		System.out.println(autumn == season);//true
//		就是将 Season2.AUTUMN 枚举对象的编号 和 Season2.SPRING 枚举对象的编号
//      进行比较函数返回值为:return self.ordinal - other.ordinal;
//		即使用前者的编号减去后者的编号
		System.out.println(Season2.AUTUMN.compareTo(Season2.SPRING));//2

enum实现接口:

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

2)枚举类与普通类一样,可以实现接口,如下形式

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值