枚举

目录


枚举介绍

什么是枚举?

为了间接地表示一些固定的值,Java 就给我们提供了枚举:指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。

枚举的定义格式:

public enum s {   
	枚举项1, 枚举项2, 枚举项3;
}
// 注意: 定义枚举类需要用关键字enum

示例:

// 定义一个枚举类,用来表示春,夏,秋,冬这四个固定值
public enum Season {
	SPRING, SUMMER, AUTUMN, WINTER;
}

枚举的特点:

  • 所有枚举类都是 Enum 的子类。
  • 我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项。
  • 每一个枚举项其实就是该枚举的一个对象。
  • 枚举也是一个类,也可以去定义成员变量。
  • 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略(建议不要省略)。
  • 枚举类可以有构造器,但必须是 private 的,它默认的也是 private 的。
  • 枚举项的用法比较特殊:枚举("");
  • 枚举类也可以有抽象方法,但是枚举项必须重写该方法。

示例:

public enum Season {

    SPRING("春"){

        // 如果枚举类中有抽象方法
        // 那么在枚举项中必须要全部重写
        @Override
        public void show() {
            System.out.println(this.name);
        }

    },

    SUMMER("夏"){
        @Override
        public void show() {
            System.out.println(this.name);
        }
    },

    AUTUMN("秋"){
        @Override
        public void show() {
            System.out.println(this.name);
        }
    },

    WINTER("冬"){
        @Override
        public void show() {
            System.out.println(this.name);
        }
    };

    public String name;

    // 空参构造
    //private Season(){}
  
    // 有参构造
    private Season(String name){
        this.name = name;
    }
  
    // 抽象方法
    public abstract void show();
}

public class EnumDemo {
    public static void main(String[] args) {

        // 我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
        System.out.println(Season.SPRING);
        System.out.println(Season.SUMMER);
        System.out.println(Season.AUTUMN);
        System.out.println(Season.WINTER);
  
        // 每一个枚举项其实就是该枚举的一个对象
        Season spring = Season.SPRING;
    }
}

枚举常用方法

方法名 说明
String name() 获取枚举项的名称
int ordinal() 返回枚举项在枚举类中的索引值
int compareTo(E o) 比较两个枚举项,返回的是索引值的差值
String toString() 返回枚举常量的名称
static <T> T valueOf(Class<T> type,String name) 获取指定枚举类中的指定名称的枚举值
values() 获得所有的枚举项

示例:

package com.example.demo;

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

public class Test {
    public static void main(String[] args) {
//        String name():获取枚举项的名称
        String name = Season.SPRING.name();
        System.out.println(name);  // SPRING
        System.out.println("-----------------------------");

//        int ordinal():返回枚举项在枚举类中的索引值
        int index1 = Season.SPRING.ordinal();  
        int index2 = Season.SUMMER.ordinal();
        int index3 = Season.AUTUMN.ordinal();
        int index4 = Season.WINTER.ordinal();
        System.out.println(index1);  // 0
        System.out.println(index2);  // 1
        System.out.println(index3);  // 2
        System.out.println(index4);  // 3
        System.out.println("-----------------------------");

//        int compareTo(E o):比较两个枚举项,返回的是索引值的差值
        int result = Season.SPRING.compareTo(Season.WINTER);
        System.out.println(result);  // -3
        System.out.println("-----------------------------");

//        String toString():返回枚举常量的名称
        String s = Season.SPRING.toString();
        System.out.println(s);  // SPRING
        System.out.println("-----------------------------");

//        static <T> T valueOf(Class<T> type,String name):获取指定枚举类中的指定名称的枚举值
        Season spring = Enum.valueOf(Season.class, "SPRING");
        System.out.println(spring);  // SPRING
        System.out.println(Season.SPRING == spring);  // true
        System.out.println("-----------------------------");

//        values():获得所有的枚举项
        Season[] values = Season.values();
        for (Season value : values) {
            System.out.println(value);
        }
        /*
        SPRING
        SUMMER
        AUTUMN
        WINTER
         */
    }
}
上一篇:season 1


下一篇:枚举类基本使用