📜  Java枚举

📅  最后修改于: 2020-09-26 14:27:37             🧑  作者: Mango

在本教程中,我们将学习Java中的枚举。我们将借助示例学习创建和使用枚举和枚举类。

在Java中,枚举(枚举的缩写)是一种具有固定的可能值的类型。我们使用enum关键字声明枚举。例如,

enum Size { 
   SMALL, MEDIUM, LARGE, EXTRALARGE 
}

在这里,我们创建了一个名为Size的枚举。

花括号内的值称为枚举值(常量)。这些是枚举类型可以保留的唯一值。

注意:枚举常量通常以大写形式表示。

让我们举一个简单的例子。

enum Size {
   SMALL, MEDIUM, LARGE, EXTRALARGE
}

class Main {
   public static void main(String[] args) {
      System.out.println(Size.SMALL);
      System.out.println(Size.MEDIUM);
   }
}

输出

SMALL
MEDIUM

从上面的示例可以看出,我们使用枚举名称访问常量值。

同样,我们可以创建枚举类型的变量。例如,

Size pizzaSize;

在这里, pizzaSizeSize类型的变量。它只能分配4个值。

pizzaSize = Size.SMALL;
pizzaSize = Size.MEDIUM;
pizzaSize = Size.LARGE;
pizzaSize = Size.EXTRALARGE;

示例1:Java枚举

enum Size {
 SMALL, MEDIUM, LARGE, EXTRALARGE
}

class Test {
 Size pizzaSize;
 public Test(Size pizzaSize) {
   this.pizzaSize = pizzaSize;
 }
 public void orderPizza() {
   switch(pizzaSize) {
     case SMALL:
       System.out.println("I ordered a small size pizza.");
       break;
     case MEDIUM:
       System.out.println("I ordered a medium size pizza.");
       break;
     default:
       System.out.println("I don't know which one to order.");
       break;
   }
 }
}

class Main {
 public static void main(String[] args) {
   Test t1 = new Test(Size.MEDIUM);
   t1.orderPizza();
 }
}

输出

I ordered a medium size pizza.

在上面的程序中,我们创建了一个枚举类型Size 。然后,我们声明一个Size类型的变量pizzaSize

只能为变量PizzaSize分配4个值( SMALLMEDIUMLARGEEXTRALARGE )。

变量pizzaSize分配了MEDIUM常数。基于此,将打印switch case语句的一种switch case


Java枚举类

在Java中,枚举类型被认为是类的一种特殊类型。它是在Java 5发行版中引入的。

枚举类可以像常规类一样包含方法和字段。

enum Size {
    constant1, constant2, …, constantN;

    // methods and fields    
}

默认情况下,枚举常量始终是public static final

创建枚举类时,编译器还将创建每个枚举常量的实例(对象)。


示例2:枚举类

enum Size{
   SMALL, MEDIUM, LARGE, EXTRALARGE;

   public String getSize() {

   // this will refer to the object SMALL
      switch(this) {
         case SMALL:
          return "small";

         case MEDIUM:
          return "medium";

         case LARGE:
          return "large";

         case EXTRALARGE:
          return "extra large";

         default:
          return null;
      }
   }

   public static void main(String[] args) {

      // calling the method getSize() using the object SMALL
      System.out.println("The size of the pizza is " + Size.SMALL.getSize());
   }
}

输出

The size of the pizza is small

在上面的示例中,我们创建了一个枚举类Size 。它具有四个常量: SMALLMEDIUMLARGEEXTRALARGE

由于Size是一个枚举类,因此编译器会自动为每个枚举常量创建实例。

main()方法中,我们使用实例SMALL调用getSize()方法。


像常规类一样,枚举类也可以包含构造函数。要了解更多信息,请访问Java枚举构造函数。


枚举类的方法

枚举类中有一些预定义的方法可以随时使用。

ordinal()方法

ordinal()方法返回枚举常量的位置。例如,

ordinal(SMALL) 
// returns 0

compareTo()方法

compareTo()方法根据序数值比较枚举常量。例如,

Size.SMALL.compareTo(Size.MEDIUM)
 // returns ordinal(SMALL) - ordinal(MEDIUM)

toString()方法

toString()方法返回枚举常量的字符串表示形式。例如,

SMALL.toString()
// returns "SMALL"

name()方法

name()方法以字符串形式返回枚举常量的定义名称。从name()方法返回的值是final 。例如,

name(SMALL)
// returns "SMALL"

valueOf()方法

valueOf()方法采用字符串,并返回具有相同字符串名称的枚举常量。例如,

Size.valueOf("SMALL")
// returns constant SMALL.

values()方法

values()方法返回一个包含所有枚举常量的枚举类型数组。例如,

Size[] enumArray = Size.value();

为什么使用Java枚举?

在Java中,引入了enum来替换int常量的使用。

假设我们使用了一个int常量集合。

class Size {
   public final static int SMALL = 1;
   public final static int MEDIUM = 2;
   public final static int LARGE = 3;
   public final static int EXTRALARGE = 4;
}

在这里,如果我们打印常数,就会出现问题。这是因为仅打印了数字,可能没有帮助。

因此,代替使用int常量,我们可以简单地使用枚举。例如,

enum Size {
   SMALL, MEDIUM, LARGE, EXTRALARGE
}

这使我们的代码更加直观。

同样,枚举提供了编译时类型的安全性。

如果我们声明一个Size类型的变量(如上述示例),则可以确保该变量将容纳四个值之一。如果我们尝试传递这四个值以外的值,则编译器将生成错误。