Enum枚举类

发布时间:2024年01月23日

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

public class Weekday{
public static final int SUN 0;
public static final int MON 1;
public static final int TUE 2;
public static final int WED 3;
public static final int THU 4;
public static final int FRI 5;
public static final int SAT 6;
}

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

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

?注意:定义枚举类是通过关键字enum实现的,我们只需依次列出枚举的常量名

枚举和int定义的常量相比,使用enum定义枚举有如下好处
首先,enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会自动检查出
类型错误。其次,不可能引用到非枚举的值,因为无法通过编译。
最后,不同类型的枚举不能互相比较或者赋值,因为类型不符

?eg1

package com.xn.Tue;

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

enum Week {
	// 当前枚举值
	MON("星期一"), TUE("星期二"), WEN("星期三"), TUR("星期四"), FRI("星期五"), SAT("星期六"), SUN("星期天");

	// 成员变量
	private String value;

	// 构造方法(必须私有)
	private Week(String value) {
		this.value = value;
	}

	// 重写Object类的toString()方法
	@Override
	public String toString() {
		return this.value;
	}
}

//类
/*
final class Weekx {
	private String weekName;
	public static final Weekx MON = new Weekx("星期,");
	public static final Weekx TUE = new Weekx("星期二");
	public static final Weekx WEN = new Weekx("星期三");
	public static final Weekx THR = new Weekx("星期四");
	public static final Weekx FRI = new Weekx("星期五");
	public static final Weekx SAT = new Weekx("星期六");
	public static final Weekx SUN = new Weekx("星期日");

//构造方法私有化
	private Weekx(String weekName) {
		this.weekName = weekName;
	}

//重写Object类tostring()
	@Override
	public String toString() {
		return this.weekName;
	}
}
*/

?eg2

package com.xn.Tue;

public class Tue03 {
	public static void main(String[] args) {
		Color red=Color.RED;
		System.out.println(red);
	}
}
enum Color{
	RED(255,0,0),GREEN(255,0,0),PINK(255,255,0),GRAY(255,0,255),BLACK(255,255,255),WHITE(0,0,0);
	private int red;
	private int blue;
	private int green;
	private Color(int red,int blue,int green) {
		this.red=red;
		this.blue=blue;
		this.green=green;
		
	}
	@Override
	public String toString() {
		return String.format("red:%d,blue:%d,green:%d", red,blue,green);
	}
	
}

enum类型
通过enum定义的枚举类,和其他的c1ass有什么区别?答案是没有任何区别。
enum定义的类型就是class,只不过它有以下几个特点:
1、定义的enum类型总是继承白java.lang.Enum,且无法被子类继承;
2、只能定义出enum的实例,而无法通过new操作符创建enum的实例;
3、定义的每个实例都是引用类型的唯一实例;可以将enum类型用于switch语句。


小结
Java使用enum定义枚举类型,它被编译器编译为final class Xxx extends Enum
通过name()获取常量定义的字符串,注意不要使用toString()
通过ordinal()返回常量定义的顺序(无实质意义)可以为enum编写构造方法、字段和方法
enum的构造方法要声明为private,字段强烈建议声明为final
enum适合用在switch语句中
?

文章来源:https://blog.csdn.net/m0_74002833/article/details/135777586
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。