Java 枚举
在 JDK5 中,枚举被添加到 Java 语言中。枚举是指命名常量的列表。在 Java 中,枚举定义了一个Class
类型。枚举可以有构造器、方法和实例变量。它是使用枚举关键字创建的。每个枚举常量默认为公共、静态和最终。即使枚举定义了一个Class
类型并有构造器,您也不能使用 new 实例化一个枚举。枚举变量的使用和声明方式与原始变量非常相似。
如何定义和使用枚举
枚举可以简单地通过创建枚举变量列表来定义。让我们举一个主题变量列表的例子,列表中有不同的主题。
//Enumeration defined enum Subject { Java, Cpp, C, Dbms }
标识符 Java、Cpp、C 和 Dbms 称为枚举常量。默认情况下,这些是公共的、静态的和最终的。
- 枚举的变量可以直接定义,不需要任何新的关键字。
枚举示例
让我们创建一个示例来定义枚举,并通过使用枚举引用变量来访问其常量。
enum WeekDays{
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
class Demo
{
public static void main(String args[])
{
WeekDays wk; //wk is an enumeration variable of type WeekDays
wk = WeekDays.SUNDAY; //wk can be assigned only the constants defined under enum type Weekdays
System.out.println("Today is "+wk);
}
}
今天是星期天
使用switch
语句的枚举示例
枚举可以在 switch case 中用来创建决策应用,这里我们已经创建了一个可以用来挑选用户选择餐厅的餐厅枚举。
enum Restaurants {
dominos, kfc, pizzahut, paninos, burgerking
}
class Test {
public static void main(String args[])
{
Restaurants r;
r = Restaurants.paninos;
switch(r) { //The name of the enumertion constants are used without their enumeration
type name i.e only r, not Restaurants.r
case dominos: //only constants defined under enum Restaurants can be used
System.out.println("I AM " + r.dominos);
break;
case kfc:
System.out.println("I AM " + r.kfc);
break;
case pizzahut:
System.out.println("I AM " + r.pizzahut);
break;
case paninos:
System.out.println("I AM " + r.paninos);
break;
case burgerking:
System.out.println("I AM " + r.burgerking);
break;
}
}
}
我是帕尼诺斯
示例:If-Else 中的枚举
枚举可以在 if 语句中用来将一个值与一些预定义的常数进行比较。这里我们使用了带有 if else 语句的枚举。
enum WeekDays{
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
class Demo {
public static void main(String args[])
{
WeekDays weekDays = WeekDays.WEDNESDAY;
if(weekDays == WeekDays.SUNDAY || weekDays == WeekDays.SATURDAY)
System.out.println("It is Weekend");
else
System.out.println("It is weekday: "+weekDays);
}
}
今天是工作日:星期三
示例:遍历枚举元素
我们可以通过调用枚举元素的静态方法值()来迭代枚举元素。此方法返回所有枚举常数的数组,这些常数还可以使用 for 循环进行迭代。见下面的例子。
enum WeekDays{
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
class Demo {
public static void main(String args[])
{
WeekDays[] weekDays = WeekDays.values();
for(WeekDays weekday : weekDays ){
System.out.println(weekday);
}
}
}
周日周一周二周三周四周五周六
Values()和 ValueOf()方法
所有枚举预定义方法值()和值()。values()
方法返回一个枚举类型的数组,其中包含所有枚举常量。它的一般形式是,
public **static** *enum-type[ ]* **values()**
valueOf()
方法用于返回枚举常量,其值等于调用此方法时作为参数传入的字符串。它的一般形式是,
public **static** *enum-type* **valueOf** (String *str*)
使用 values()和 valueOf()方法的枚举示例:
Value 和 valueOf 都是枚举类型的静态方法,可用于访问枚举元素。这里我们使用这两种方法来访问枚举元素。
enum Restaurants {
DOMINOS, KFC, PIZZAHUT, PANINOS, BURGERKING
}
class Demo {
public static void main(String args[])
{
Restaurants r;
System.out.println("All constants of enum type Restaurants are:");
Restaurants rArray[] = Restaurants.values(); //returns an array of constants of type Restaurants
for(Restaurants a : rArray) //using foreach loop
System.out.println(a);
r = Restaurants.valueOf("DOMINOS");
System.out.println("It is " + r);
}
}
枚举类型餐厅的所有常量都是:DOMINOS KFC PIZZAHUT PANINOS BURGERKING 它是 DOMINOS
关于枚举需要记住的要点
- 枚举属于
Class
类型,具有 Java 类所具有的所有功能。 - 枚举可以有构造器、实例变量、方法,甚至可以实现接口。
- 枚举不使用 new 关键字进行实例化。
- 默认情况下,所有枚举都继承 java.lang.Enum 类。
带有构造器、实例变量和方法的枚举
枚举类似于类,只是它不能实例化。它可以有方法、构造器、变量等。在这个例子中,我们在 enum 中创建构造器和方法,并使用它们访问其常量值。
enum Student
{
John(11), Bella(10), Sam(13), Viraaj(9);
private int age; //variable defined in enum Student
int getage() { return age; } //method defined in enum Student
private Student(int age) //constructor defined in enum Student
{
this.age= age;
}
}
class Demo
{
public static void main( String args[] )
{
Student S;
System.out.println("Age of Viraaj is " +Student.Viraaj.getage()+ " years");
}
}
维拉杰的年龄是 9 岁
在这个例子中,只要我们声明一个枚举变量(学生 S ,构造器就被调用一次,它用括号中用它们指定的值初始化每个枚举常数的年龄。