Java 枚举(超详细讲解)

NoloveisGod 2024-08-07 08:35:02 阅读 67

Java语言的强大之处在于它提供了多种多样的类库,从而大大提高了程序的编程效率和质量。

一、枚举

事先考虑到某一变量可能的取值,尽可能用自然语言忠表意清楚的单词来表示它的每一个值,用这中思路定义的类型被称为枚举类型。

枚举事由一组固定的常量组成的类型。在Java中每个枚举都继承java.lang.Enum类,使用关键字enum定义。

语法格式:

<code>访问修饰符 enum 枚举名{

常量1[,常量2……[ ; ]]

//[其他成员]

}

在枚举中可以定义多个常量,表示不同的枚举值,即枚举元素,之间用逗号隔开。在枚举中可以定义其他成员,包括构造方法等,置于枚举常量之后。可以使用“枚举名.常量名”的形式取出枚举中的指定内容。

代码示例:

public enum Gender{

Male,Female;

}

在以上代码中,Gender中自定义的枚举类型里包含Male、Female两个数据。

在Java中,通常使用枚举表示一组有限的值,实现对输入的值进行约束。下面通过示例学习在程序中如何定义和使用枚举。

代码示例:

public enum Week {

MON,TUE,WED,THU,FRI,SAT,SUN;

}

public class WeekTest {

public void doWhat(Week day) {

switch (day) {

case MON:

case TUE:

case WED:

case THU:

case FRI:

System.out.println("工作日,努力写代码!");

break;

case SAT:

System.out.println("星期六,休息!看电影!");

break;

case SUN:

System.out.println("星期日,休息!打篮球!");

break;

default:

System.out.println("地球上一个星期就7天。");

}

}

public static void main(String[] args) {

WeekTest t=new WeekTest();

t.doWhat(Week.THU);

Week sat=Week.SAT;

t.doWhat(sat);

for (Week w:Week.values()){

t.doWhat(w);

}

}

}

运行结果:

在这里插入图片描述

在上面代码中,Week.values()表示取得枚举中全部内容,返回一个对象数组,这是枚举本身支持的一个方法。除此之外,关于Enum类的其他用法,此处不深入讲解,以后用到可自行查看API帮助文档

注意:

在switch结构中可以使用枚举类型作为判断变量,此时需注意,case关键字后一定不能在枚举值前加枚举类型名,如Week.THU,否则会出现编译错误。

2.enum关键字表示的是java.lang.Enum类型,即使用enum声明的枚举类型,就相当于定义一个类,此类默认继承java.lang.Enum类,因此可使用其中定义的所有方法。

二、枚举的方法

方法 描述
T[] values() 以数组形式返回枚举类型的所有成员
T valueOf() 将普通字符串转换为枚举实例
int compareTo() 比较两个枚举成员在定义时的顺序,结果为负整数、零或正整数,表示当前对象小于、等于或大于指定对象
int ordinal() 获取枚举成员的索引位置

代码示例:

<code>public enum Week {

MON,TUE,WED,THU,FRI,SAT,SUN;

}

public class EnumTest {

public static void main(String[] args) {

//遍历枚举

System.out.println("****foreach遍历枚举元素****");

for (Week w:Week.values()){

System.out.println(w);

}

System.out.println("****获取枚举的个数****");

System.out.println("一周有"+Week.values().length+"天");

System.out.println("****使用索引遍历枚举元素****");

for (int i = 0; i < Week.values().length; i++) {

System.out.println("索引"+Week.values()[i].ordinal()+"值:"+Week.values()[i]+"。");

}

System.out.println("****枚举元素比较****");

//字符串转换为枚举再进行比较

System.out.println((Week.valueOf("MON")).equals(Week.MON));

System.out.println(Week.FRI.compareTo(Week.TUE));

}

}

运行结果:

****foreach遍历枚举元素****

MON

TUE

WED

THU

FRI

SAT

SUN

****获取枚举的个数****

一周有7天

****使用索引遍历枚举元素****

索引0值:MON。

索引1值:TUE。

索引2值:WED。

索引3值:THU。

索引4值:FRI。

索引5值:SAT。

索引6值:SUN。

****枚举元素比较****

true

3

从上面示例中可看出,枚举具有类似数组的特征,每个枚举元素都默认有一个对应的索引值,表示枚举元素的位置,初始值从0开始,能够通过索引访问枚举元素。同时,通过调用枚举类中的方法可以实现 更多样化的数据操作,大大提高了编码效率,避免错误发生,简化代码。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。