本教程通过实例讲解java中的枚举。
什么是java中的枚举
Enum 枚举或枚举值是不能改变的常数。这些常量按照java的编码规范使用大写字母来指定。
枚举是在Java 5版本中引入的,在Java 5引入之前,我们必须自己编写常量来处理枚举功能,如下所示
枚举可以有字符串或只有整数的值。
public class MonthsConstants{
public static final String JAN="1";
public static final String FEB="2";
..
}
public class MonthsConstantsTest
{ int monthsCode; //can assign any value like 1,2 or 100
}
你必须自己处理所有的常量,并且容易出错。
这些值仅在编译时是一个有效的类型,如果给这些值分配了错误的类型,就会产生错误。此外,你可以分配任何值。
,如果我们想添加新的常量,这将需要更多的工作来维护你的代码。因为所有这些,enum 类被引入。
默认情况下,enum 实现了java.lang.Enum ,而java.io.Serialization 和java.lang.Comparable 接口也实现了。
java枚举API提供了不同的方法,如toString() ,name() ,以及valueOf() 方法。
我现在列出了java中最好的枚举例子。
如何定义枚举类?
Enum 可以用 enum关键字来声明。这些可以在单独的文件或现有的java类中定义。
如果你将枚举类定义为公共的,声明应该在单独的java文件中。
这是在java中定义枚举的方法之一。
public enum Months{
JAN(1),FEB(2),MAR(3),APRIL(4),MAY(5),JUN(6),JUL(7),AUG(8),SEP(9),OCT(10),NOV(11),DEC(12);
}
我们将在一个java类文件中创建这个枚举类并命名。
请注意,枚举常量在常量定义的最后有一个分号:
- 定义了月的枚举类
- 每个枚举常量都包含字符串和整数值。
如何在另一个类中定义枚举?
这是一个在其他类中声明枚举的例子。
public class MonthsClass{
public enum Months{
JAN(1),FEB(2),MAR(3),APRIL(4),MAY(5),JUN(6),JUL(7),AUG(8),SEP(9),OCT(10),NOV(11),DEC(12)
}
Months monthsNames;
}
在上面的例子中,枚举类被创建在Mon`thsClass中。这种方法不需要在枚举常量的末尾添加分号。
如何创建一个枚举对象?
我们可以使用new 操作符创建enum 对象。我们也可以将常量附加到枚举类中。
下面是一个为枚举类创建对象的例子
MonthsClass monthsObject=new MonthsClass();
monthsObject.monthsNames=MonthsClass.Months.JAN;
如何定义枚举构造函数?
枚举声明类似于类,所以枚举可以有构造函数。这将在创建枚举对象时被调用。
枚举中的构造函数是私有的,这意味着外面的类不应该能够创建枚举对象的创建。
public enum Months{
JAN(1),FEB(2),MAR(3),APRIL(4),MAY(5),JUN(6),JUL(7),AUG(8),SEP(9),OCT(10),NOV(11),DEC(12);
private int monthCode
Months(int monthCode){
this.monthCode=monthCode;
}
public int value(){
return monthCode;
}
如何在Java中比较枚举对象?
通常,我们可以使用== 和equals 方法来比较对象
枚举常量也可以用同样的方法来比较。
if(Months.JAN==Months.FEB){return true else return false;}
我们也可以使用equals 方法来比较相同类型的枚举对象。
如何遍历枚举常量
enum类提供了values() 方法进行迭代,该方法按照常量创建的顺序返回enum常量的列表。
for(Months months:Months.values()){
System.out.print(" "+months);
}
输出:
JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
如何将枚举转换为整数?
有些时候,你想把枚举常量转换为整数。
正如上面定义的枚举声明
Months months=Months.Jan;
Integer int=new Integer(months.value());
value 枚举中的方法提供了枚举常量的 value
如何将一个整数转换为一个枚举常量?
我们必须在类中定义以下方法,为给定的输入返回整数的Enum 。
static Months getMonths( int monthCode ) throws Exception
{
for (Months months : Months.values())
if (months.value() == monthCode)
return months;
}
希望这能解决通过提供一个整数作为上述方法的输入来转换为枚举常数的问题。
如何将字符串转换为枚举对象?
枚举类提供了valueOf() method ,将字符串作为参数传入,返回枚举常量。
Months month=Months.valueOf("JAN");
Months month=Months.valueOf("abc");
在上面的代码中,第一行,月份对象将字符串值打印为Jan
第二行,有效的字符串没有传递给enum类,它抛出了java.lang.IllegalArgumentException ,信息是No enum constants for your class 。
如何在开关条件中使用枚举类?
枚举的一个最酷的特点是我们可以在switch情况下使用枚举对象,就像一个原始类型。
Months month=Months.JAN;
switch(month){
case JAN:
System.out.println("january");
break;
case FEB:
System.out.println("febrauary");}
break;
----
---
}
枚举类在java中的优势
- 默认情况下,枚举类实现了序列化,并覆盖了equals和hashcode方法,所以不需要明确的序列化实现。
- 随着
Enum类的使用,EnumSet和EnumMap被引入,可以实现一系列的枚举操作。 - 使用枚举的代码的维护非常容易
枚举类的缺点
枚举类是对java.lang.Enum 的扩展,java.lang 中的类是最终的,所以枚举类不能被子类化。
希望你能理解java中的枚举例子。
请分享你的评论,你是如何在你的开发中使用枚举类的。