Java枚举用法详解

本文概述

  • Java枚举要记住的要点
  • 定义Java枚举
  • switch语句中的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=http://www.srcmini.com/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=http://www.srcmini.com/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 = http://www.srcmini.com/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"); } }}

立即测试
【Java枚举用法详解】输出:
monday

    推荐阅读