个性化阅读
专注于IT技术分析

Java枚举用法详解

本文概述

Java中的Enum是一种数据类型, 其中包含一组固定的常量。

它可以用于一周中的几天(周日, 周一, 周二, 周三, 周四, 周五和周六), 方向(北, 南, 东和西), 季节(春季, 夏季, 冬季和秋季或秋季) ), 颜色(红色, 黄色, 蓝色, 绿色, 白色和黑色)等。根据Java的命名约定, 所有常量都应使用大写字母。因此, 我们用大写字母表示枚举常量。

可以将Java枚举视为具有固定常量集(不变的变量)的类。 Java枚举常量是静态的, 并且是隐式的final。从JDK 1.5开始可用。

枚举用于创建我们自己的数据类型, 例如类。枚举数据类型(也称为枚举数据类型)用于在Java中定义枚举。与C / C ++不同, Java中的枚举功能更强大。在这里, 我们可以在类内或类外定义一个枚举。

Java Enum在内部继承Enum类, 因此它不能继承任何其他类, 但是可以实现许多接口。我们可以在Java枚举中包含字段, 构造函数, 方法和主要方法。

Java枚举要记住的要点

  • 枚举可提高类型安全性
  • 枚举可轻松用于切换
  • 枚举可以遍历
  • 枚举可以具有字段, 构造函数和方法
  • Enum可以实现许多接口, 但是不能扩展任何类, 因为它在内部扩展了Enum类
Java枚举

Java枚举的简单示例

class EnumExample1{
//defining the enum inside the class
public enum Season { WINTER, SPRING, SUMMER, FALL }
//main method
public static void main(String[] args) {
//traversing the enum
for (Season s : Season.values())
System.out.println(s);
}}

立即测试

输出:

WINTER
SPRING
SUMMER
FALL

让我们看看Java枚举的另一个示例, 其中我们使用Java枚举的value(), valueOf()和ordinal()方法。

class EnumExample1{
//defining enum within class
public enum Season { WINTER, SPRING, SUMMER, FALL }
//creating the main method
public static void main(String[] args) {
//printing all enum
for (Season s : Season.values()){
System.out.println(s);
}
System.out.println("Value of WINTER is: "+Season.valueOf("WINTER"));
System.out.println("Index of WINTER is: "+Season.valueOf("WINTER").ordinal());
System.out.println("Index of SUMMER is: "+Season.valueOf("SUMMER").ordinal());

}}

输出:

WINTER
SPRING
SUMMER
FALL
Value of WINTER is: WINTER
Index of WINTER is: 0
Index of SUMMER is: 2

注意:Java编译器在编译时会在枚举内部向内部添加values(), valueOf()和ordinal()方法。它在内部为枚举创建静态和最终类。

枚举中的values()方法的目的是什么?

Java编译器在创建枚举时在内部添加values()方法。 values()方法返回一个包含枚举的所有值的数组。

枚举中的valueOf()方法的目的是什么?

Java编译器在创建枚举时在内部添加valueOf()方法。 valueOf()方法返回给定常量枚举的值。

枚举中ordinal()方法的目的是什么?

Java编译器在创建枚举时在内部添加ordinal()方法。 ordinal()方法返回枚举值的索引。


定义Java枚举

枚举可以在类内或类外定义, 因为它类似于类。枚举常量末尾的分号(;)是可选的。例如:

enum Season { WINTER, SPRING, SUMMER, FALL }

要么,

enum Season { WINTER, SPRING, SUMMER, FALL; }

Java枚举的两个定义是相同的。

Java枚举示例:在外部类中定义

enum Season { WINTER, SPRING, SUMMER, FALL }
class EnumExample2{
public static void main(String[] args) {
Season s=Season.WINTER;
System.out.println(s);
}}

立即测试

输出:

WINTER

Java枚举示例:在类内部定义

class EnumExample3{
enum Season { WINTER, SPRING, SUMMER, FALL; }//semicolon(;) is optional here
public static void main(String[] args) {
Season s=Season.WINTER;//enum type is required to access WINTER
System.out.println(s);
}}

立即测试

输出:

WINTER

Java枚举示例:枚举内部的main方法

如果将main()方法放在枚举内, 则可以直接运行枚举。

enum Season { 
WINTER, SPRING, SUMMER, FALL;
public static void main(String[] args) {
Season s=Season.WINTER;
System.out.println(s);
}
}

输出:

WINTER

初始化枚举常量的特定值

枚举常量的初始值从0、1、2、3等开始。但是, 我们可以通过定义字段和构造函数来将特定值初始化为枚举常量。如前所述, Enum可以具有字段, 构造函数和方法。

为枚举常量指定初始值的示例

class EnumExample4{
enum Season{ 
WINTER(5), SPRING(10), SUMMER(15), FALL(20); 

private int value;
private Season(int value){
this.value=value;
}
}
public static void main(String args[]){
for (Season s : Season.values())
System.out.println(s+" "+s.value);

}}

立即测试

输出:

WINTER 5
SPRING 10
SUMMER 15
FALL 20

枚举类型的构造方法是私有的。如果你不声明私有编译器, 则会在内部创建私有构造函数。

enum Season{
WINTER(10), SUMMER(20);
private int value;
Season(int value){
this.value=value;
}
}

编译器为上面的枚举类型示例生成的内部代码

final class Season extends Enum
{
    public static Season[] values()
    {
        return (Season[])$VALUES.clone();
    }
    public static Season valueOf(String s)
    {
        return (Season)Enum.valueOf(Season, s);
    }
    private Season(String s, int i, int j)
    {
        super(s, i);
        value = j;
    }
    public static final Season WINTER;
    public static final Season SUMMER;
    private int value;
    private static final Season $VALUES[];
    static 
    {
        WINTER = new Season("WINTER", 0, 10);
        SUMMER = new Season("SUMMER", 1, 20);
        $VALUES = (new Season[] {
            WINTER, SUMMER
        });
    }
}

我们可以通过new关键字创建Enum的实例吗?

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

枚举中可以有一个抽象方法吗?

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


switch语句中的Java枚举

我们可以在给定的示例中将enum应用于switch语句:

在switch语句上应用Enum的示例

class EnumExample5{
enum Day{ SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}
public static void main(String args[]){
Day day=Day.MONDAY;

switch(day){
case SUNDAY: 
 System.out.println("sunday");
 break;
case MONDAY: 
 System.out.println("monday");
 break;
default:
System.out.println("other day");
}
}}

立即测试

输出:

monday
赞(0)
未经允许不得转载:srcmini » Java枚举用法详解

评论 抢沙发

评论前必须登录!