Java Enum的完整指南

627 阅读3分钟

Java是一种面向对象的编程语言。因此, Java中的枚举 比C/C++中的枚举更有效力。我们可以向它添加方法、变量和构造函数

枚举的关键点

  1. 枚举提高了类型安全性。
  2. 枚举可以很容易地在开关中使用。
  3. 枚举可以有字段、构造函数和方法。
  4. enum可以实现许多接口,但不能扩展任何类,因为它内部扩展了Enum类。
  5. 枚举可以被遍历。

Java 枚举

Java中的枚举代表编程中的一组命名常量。枚举是一个特殊的类,代表一组常量。Enum中所有可能的值都在编译时使用。因此,我们可以 在枚举数据类型的帮助下表示一个枚举类。

例如,扑克牌中的四种花色可以是四个枚举器,名为Club、Diamond、Heart和Spade,属于名为Suit的枚举类型。

其他的例子包括像行星、星期几、颜色、方向等自然类型的枚举。最后,枚举是不可改变的变量,就像最终变量一样。

让我们看看如何创建声明一个枚举。

枚举的语法

enum enum_name
{
     Constant list/ methods
}

请看下面的Test.java文件。

enum WeekDays
{ 
   sunday, monday, tuesday, wednesday, thursday, friday, saturday
}

class Test
{
  public static void main(String []er)
  {
    WeekDays wd; //wk is an enumeration variable of type WeekDays
    wd = WeekDays.sunday; //wk can be assigned only the constants defined under enum type Weekdays
    System.out.println("Today is "+wd);
  }
}

在上面的例子中,周日、周一......这些都被称为枚举常量。这些都是公共的、静态的、默认为最终的。

我们可以通过一个新的关键字来创建一个enum的实例吗?

不能,因为它只包含私有构造函数。

我们可以在枚举中拥有一个抽象的方法吗?

可以,当然可以。我们可以有抽象的方法,并且可以提供这些方法的实现。

枚举类型的变量可以不用 new 关键字 来声明 。

枚举类型的变量只能有枚举常量作为一个值。因此,我们定义一个枚举变量的语法如下。

enum_variable = enum_type.enum_constant。

请看输出结果:

Java Enum Tutorial With Example

现在我们来看看如何在枚举中使用switch case。

请看下面的代码:

enum WeekDays
{ 
	sunday, monday, tuesday, wednesday, thursday, friday, saturday
}

class Switch 
{
 public static void main(String []er)
 {
    WeekDays wd; 
    wd = WeekDays.monday; 
    switch(wd)
    {
	case sunday:
	    System.out.println("Today is "+wd.sunday);
		break;
	case monday:
		System.out.println("Today is "+wd.monday);
		break;
		
	case tuesday:
		System.out.println("Today is "+wd.tuesday);
		break;
	case wednesday:
		System.out.println("Today is "+wd.wednesday);
		break;
	case thursday:
		System.out.println("Today is "+wd.thursday);
		break;
	case friday:
		System.out.println("Today is "+wd.friday);
		break;
	case saturday:
		System.out.println("Today is "+wd.saturday);
		break;
     } 
   }
 }

请看输出:

Switch case in the enumeration

Values()和valueOf()方法

所有的枚举都是预定义的方法 values()valueOf()

枚举中的values()方法的主要作用是什么?

java编译器在内部添加了values()函数来创建枚举。values()方法返回包含枚举所有值的数组。

values()方法返回包含所有枚举常数的枚举型数组。

values()方法的语法如下。

public static enum-type [] values();

valueOf()方法返回枚举常量的值,该值等于调用该方法时作为参数传入的一个字符串。

请看下面的语法

public static enum-type[] valueOf(String s);

让我们看看这两个方法的例子:

enum WeekDays
{ 
	sunday, monday, tuesday, wednesday, thursday, friday, saturday
}

class Method
{
 public static void main(String []er)
 {
    WeekDays wd;  
    System.out.println("Constant of enum type weekdays are :");
    WeekDays arr[]=WeekDays.values();
    for(WeekDays a: arr)
    {
	  System.out.print(" "+a);
    }
    wd=WeekDays.valueOf("sunday");
    System.out.println("\nToday is "+wd);
 }
}

请看下面的输出:

Values() and valueOf() method

现在我们将了解包含枚举中构造方法的完整程序。

请看下面的程序并分析其输出。

enum WeekDays
{ 
	sunday(1), monday(2), tuesday(3), wednesday(4), thursday(5), friday(6), saturday(7);
	private int day;
	int getday()
	{
		return day;
	}
	 WeekDays(int day)
	{
		this.day=day;
	}
}

class Final
{
   public static void main(String []er)
   {
      WeekDays wd; 
      System.out.println("Sunday is the "+WeekDays.sunday.getday()+" day of week");
   }
}

请看下面的输出:

valueOf() method

枚举和类的区别

枚举可以,就像 一样,有属性和方法。

主要的区别是枚举常量是公共的、静态的、最终的和不可改变的,不能被重写。

枚举不能用来创建对象,也不能扩展其他类,但它可以实现接口。

所以,Java中的枚举就到此为止。

本教程就到此为止。

The postJava Enum:完整指南》首次出现在AppDividend上。