【Java | 枚举类型】:常量定义的新方式(enum)

174 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第18天,点击查看活动详情

1、写在前面

大家好,今天笔记的内容是:

  • 枚举类型

2、内容

2.1、引入

Java中,我们通常将常量放置在接口中,并且通过static final来定义常量。这样我们在程序中就可以直接使用常量。

比如:

public interface Weekday {
    public static final int MON = 1;
    public static final int TUE = 2;
    public static final int WED = 3;
    public static final int THU = 4;
    public static final int FRI = 5;
    public static final int SAT = 6;
    public static final int SUN = 7;
}

而枚举类型是JDK 1.5后引入的新特性,存于java.lang包中,其逐渐取代接口常量的定义方式。

当我们定义一个枚举类型时,每个成员都可以看作是枚举类型的实例,并且默认被finalpublicstatic修饰,可直接使用枚举类型名调用枚举类成员。

2.2、enum 与 class 的区别

枚举类型实际上就是一个类,继承于java.lang.Enum类。enumclass基本一样,只不过enum有一些自己的特点:

  • 定义的enum类型总是继承自java.lang.Enum,无法被继承;
  • 我们无法new一个enum的实例,只能定义enum实例;
  • 可以将enum类用于switch语句。
  • enum类型的每个实例都是全局唯一的

2.3、声明枚举

声明枚举时必须使用enum关键字,语法如下:

public enum myEnum {
    VAL_1,
    VAL_2,
    Val_3,
    ...
}

举个例子;

public class Main {
    public static void main(String[] args) {
        Weekday day = Weekday.SAT;
        System.out.println(day);    // SAT
    }
}

public enum Weekday {
    MON, TUE, WED, THU, FRI, SAT, SUN;
}

上述枚举类Weekday的常量有MONTUEWEDTHUFRISATSUN,分别表示星期一、星期二、星期三、星期四、星期五、星期六、星期天。

2.4、enum 的常用方法

以枚举类型Weekday为例,记录enum 的常用方法。

public enum Weekday {
    MON, TUE, WED, THU, FRI, SAT, SUN;
}

values()

values()方法用于返回枚举类型中的所有成员。也就是将枚举类型中所有的枚举值以数组的形式返回。

比如:

public class Main {
    public static void main(String[] args) {
        for(Month m : Month.values()) {
            System.out.print(m + "  ");
        }
    }
}

enum Month {
    January, February, March, April, May, June, July, August, September, October, November, December
}

运行结果:

January  February  March  April  May  June  July  August  September  October  November  December

valueOf()

valueOf()方法将普通字符串转换为枚举实例,也就是返回指定字符串值的枚举常量。

比如:

public class Main {
    public static void main(String[] args) {
        System.out.println(Month.valueOf("January"));
    }
}

enum Month {
    January, February, March, April, May, June, July, August, September, October, November, December
}

运行结果:

January

compareTo()

compareTo()方法用于比较两个枚举类型对象定义时的顺序。

举个例子:

public class myEnum {
    public static void main(String[] args) {
        Season MyFavorite = Season.valueOf("AUTUMN");   // 根据指定字符串创建一个枚举值
        Season[] SeasonArr = Season.values();
        for(int i = 0; i<SeasonArr.length; i++) {
            String mes = "";
            int ans = MyFavorite.compareTo(SeasonArr[i]);
            if (ans < 0) {
                mes = MyFavorite + " 在 " + SeasonArr[i] + " 的前 " + (-ans) + " 个位置";
            } else if (ans > 0) {
                mes = MyFavorite + " 在 " + SeasonArr[i] + " 的后 " + ans + " 个位置";
            } else {
                mes = "我最喜欢的季节就是:" + SeasonArr[i];
            }
            System.out.println(mes);
        }
    }
}

// 一年四季
enum Season {
    SPRING, SUMMER, AUTUMN, WINTER
}

写在最后

好了,文章的内容就到这里,感谢观看。