Enum枚举类

常量的定义和使用

在Java中,我们可以通过static final来定义常量。例如,我们希望定义周一到周日这7个常量,可以用7个不同int表示:

public class Weekday{
    public static final int SUN = 0;
    public static final int MON = 0;
    public static final int TUE = 0;
    public static final int WED = 0;
    public static final int THU = 0;
    public static final int FRI = 0;
    public static final int SAT = 0;
}

也可以把常量定义为字符串类型,例如,定义三种颜色的常量:

public class Color{
    public static final String RED="r";
    public static final String GREEN="g";
    public static final String BLUE="b";
}

但是,无论是int常量还是String常量,使用这些常量来表示一组枚举值的时候,有一个严重的问题就是,编译器无法检查每个值的合理性。例如:

if(weekday==6||weekday==7){
    if(task==Weekday.MON){
        //TODO:
    }
}

上述代码编译和运行据均不会报错,但存在两个问题:
注意到Weekday定义的常量范围是0~6,并不包含7,编译器无法检查不在枚举中的int值;

定义的常量仍可与其他变量比较,但其用途并非是枚举星期值


enum

        为了让编译器能自动检查某个值在枚举的集合内,并且,不同的用途的枚举需要不同的类型来标记,不能混用,我们可以使用enum来定义枚举

public class Enum01 {
	public static void main(String[] args) {
		
		Week dayOfWeek1=Week.SUN;
		System.out.println(dayOfWeek1.toString());
	}
}
//枚举
enum Week{

	//当前枚举值
	MON("星期一"),TUE("星期二"),
    WED("星期三"),THU("星期四"),
    FRI("星期五"),SAT("星期六"),
    SUN("星期天");
	
	//成员变量
	private String value;
	
	//构造方法
	private Week(String weekName) {
		this.value=value;
	}
	
	//重写枚举父类的toString()方法
	@Override
	public String toString() {
		return this.value;
	}
}

使用enum的好处

1.enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会id检查出类型错误。

2不可能引用到非枚举的值,因为无法通过编译。

3.不同类型的枚举值不能互相比较或者赋值,因为类型不符。


enum的比较

使用enum定义的枚举类是一种引用类型。以前我们学过,引用类型比较,要使用equals()方法,如果使用==比较,它比较的是两个引用类型的变量是否是同一个对象。因此,引用类型比较,要始终使用equals()方法,但enum类型可以例外。

因为enum类型的每个常量在JVM中只有一个唯一的实例,所有可以直接用比较:

//方式1
if(day==Weekday.FRI){}

//方式2:可以使用但不简洁
if(day.equals(Weekday.SUN)){}

enum的方法

由于enum是一个class,每个枚举的值都是class实例,因此,这些实例有一些方法:

name( )方法

作用:返回常量名,例如:

String s = Weekday.SUN.name; //"SUN"

ordinal( )方法

作用:返回定义的常量顺序,可以从0开始计数,例如:

int n = Weekday.MON.ordinal(); //1

toString( )方法

作用:默认情况下,对枚举常量调用toString()会返回和name()一样的字符串。但是,toString()可以被重写,而name()则不不行。我们可以给Weekday添加toString()方法进行重写,目的是在输出时更有可读性。

enum Week{

	//当前枚举值
	MON("星期一"),TUE("星期二"),
    WED("星期三"),THU("星期四"),
    FRI("星期五"),SAT("星期六"),
    SUN("星期天");
	
	//成员变量
	private String value;
	
	//构造方法
	private Week(String weekName) {
		this.value=value;
	}
	
	//重写枚举父类的toString()方法
	@Override
	public String toString() {
		return this.value;
	}
}

以上是我个人对enum枚举类的一些总结,如有错漏请务必联系,非常感谢

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

晓晨CH

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

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

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

打赏作者

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

抵扣说明:

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

余额充值