java中的枚举

定义

一个类有多个实例,但是实例的个数不是无穷的,是有限的。枚举类中的实例称为枚举项,一般来说,一个枚举类不应该有太多的枚举项。

使用

public enum Direction {
	FRONT,BEHIND,LEFT,RIGHT;
}

public class Test{
    public static void main(String[] args){
        Direction a = Direction.LEFT;
        // 创建一个枚举项,可以看作是new 对象
    }
}

注意:定义枚举类的关键字是enum,而不是Enum 所有的关键字都是小写的。

其中,FRONT,BEHIND,LEFT,RIGHT都是枚举项,枚举项必须在最前面,他们都是本类的实例,也就说,本类只有四个对象

在定义枚举项时,多个枚举项使用逗号分割,最后一个枚举项使用分号结尾。

如果枚举类中只有枚举项,最后的分号可以省略不写(不建议)

枚举与switch

public class Test {
	public static void main(String[] args) {
		Direction a = Direction.LEFT;
		switch (a) {
		case BEHIND:
			System.out.println("behind");
			break;
		case LEFT:
			System.out.println("left");
			break;
		case RIGHT:
			System.out.println("right");
			break;
		case FRONT:
			System.out.println("front");
			break;
		}
	}
}

注意:在switch中,不能使用枚举类的名称,因为编译器会根据switch中的a的类型去判断每个枚举类型,在case中必须直接给出与a相同类型的枚举项,而不能再有类型

所有枚举类都是Enum的子类

所有枚举类默认是Enum的子类,无需使用extends来继承,所以Enum中的方法,所有的枚举类都拥有

int compareTo() // 比较两个枚举项,其实比较的是序号,即:在枚举类中声明的顺序,例如:FRONT<BEHIND
boolean equals // 比较两个枚举项是否相等
int hashCode() // 返回枚举项的hashCode()
String name() // 返回枚举项的名称
int ordinal() // 返回枚举项在枚举类中的声明的序号,默认从0开始
String toString() // 把枚举项转化成字符串
static T valueOf(Class enumType,String name)// 把字符串转化成枚举项

枚举类的构造器

枚举类也可以有构造器,构造器默认都是private修饰,而且只能是private修饰,因为枚举类型的实例不能由外界来创建,实际上每个枚举项都是调用了一次无参构造方法

枚举类可以有成员

枚举类和正常类一样,都可以有实例变量、实例方法、静态方法等等 ,只不过它的实例个数是有限的。

如果枚举类只有一个有参的构造方法,那么在声明枚举项时需要传参

public enum Direction {
	FRONT("前");
    public String name;
    Direction(String name){
        this.name = name;
    }
}

枚举类可以有抽象方法

创建每个枚举类时,使用“特殊”语法

  1. 只需要在方法上添加abstract关键字即可,不需要再enum前面添加abstract关键字
  2. 但是声明枚举项时需要使用匿名内部类

每个枚举类都有两个特殊的方法

这两个方法不用声明就可以调用,并且是static修饰的方法,不属于Enum类

values(); // 返回本类所有的枚举项
valueOf(String name) //通过枚举项的名字返回指定枚举项
posted @   ning12  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示