Java枚举

1 什么是Java枚举

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

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


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


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

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

2 Java枚举的特点

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

3 Java枚举的例子

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java枚举的例子
 */
class Demo{
    //在类内部定义枚举
    public enum Season { WINTER, SPRING, SUMMER, FALL }
    //main方法
    public static void main(String[] args) {
        //使用枚举
        for (Season s : Season.values())
            System.out.println(s);
    }
}

输出结果为:

WINTER
SPRING
SUMMER
FALL

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

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java枚举的例子
 */
class EnumExample1{
    //类内部定义枚举
    public enum Season { WINTER, SPRING, SUMMER, FALL }
    //main方法
    public static void main(String[] args) {
        //打印输出所有枚举值
        for (Season s : Season.values()){
            System.out.println(s);
        }
        System.out.println("WINTER的value值是: "+Season.valueOf("WINTER"));
        System.out.println("WINTER的索引是: "+Season.valueOf("WINTER").ordinal());
        System.out.println("SUMMER的索引是: "+Season.valueOf("SUMMER").ordinal());

    }}

输出结果为:

WINTER
SPRING
SUMMER
FALL
WINTER的value值是: WINTER
WINTER的索引是: 0
SUMMER的索引是: 2

3.1 枚举的values()方法

values() 方法返回一个包含枚举的所有值的数组。

3.2 枚举的valueOf()方法

valueOf()方法返回给定常量枚举的值。

3.3 枚举的ordinal()方法

ordinal() 方法返回枚举值的索引。

4 定义Java枚举语法

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

enum Season { WINTER, SPRING, SUMMER, FALL }  

或者

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

4.1 类外部定义Java枚举

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * 类外部定义Java枚举
 */
enum Season { WINTER, SPRING, SUMMER, FALL }
class Demo{
    public static void main(String[] args) {
        Season s=Season.WINTER;
        System.out.println(s);
    }
}

输出结果为:

WINTER

4.2 类内部定义Java枚举

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * 类内部定义Java枚举
 */
class Demo{
    enum Season { WINTER, SPRING, SUMMER, FALL; }//分号(;)是可选的
    public static void main(String[] args) {
        Season s=Season.WINTER;//必须输入枚举类型才能访问WINTER
        System.out.println(s);
    }
}

输出结果为:

WINTER

5 main方法的枚举

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

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * main方法中的枚举
 */
enum Season {
    WINTER, SPRING, SUMMER, FALL;
    public static void main(String[] args) {
        Season s=Season.WINTER;
        System.out.println(s);
    }
}

输出结果为:

WINTER

6 初始化枚举常量

枚举常量的初始值从0、1、2、3等开始。但是,我们可以通过定义属性和构造方法来为枚举常量设置初始化值。前面我们讲到,枚举(Enum)可以包含属性,构造方法和普通方法。

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * 初始化枚举常量的例子
 */
class Demo{
    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

7 switch中使用枚举

我们可以将Java枚举应用在switch语句中,如下所示:

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * switch中使用枚举的例子
 */
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

 

推荐好课