枚举类

Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等等。

自定义枚举类

方式一:通过一般类

  1. 声明对象的属性:private final修饰
  2. 私有化类的构造器,并给对象属性初始化
  3. 提供当前枚举类的多个对象:public static final修饰
  4. 可选:获取枚举类的属性 getXXX() 或 toString()

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Season{
//3.提供当前枚举类的多个对象
public static final Season SPRING = new Season("Spring");
public static final Season SUMMER = new Season("Summer");
public static final Season AUTUMN = new Season("Autumn");
public static final Season WINTER = new Season("Winter");
//1.声明对象的属性
private final String name;
//2.私有化构造器
private Season(String name) {
this.name = name;
}
//4.可选
public String getName() {
return name;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
'}';
}
}

方式二:enum关键字

在jdk5.0以后,枚举类可以使用 enum 关键字来定义,各个常量使用逗号 , 来分割。

枚举跟普通类一样可以用自己的变量、方法和构造函数,构造器只能使用 private 访问修饰符,所以外部无法调用。

枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Main {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
spring.printSeason();
}
}

enum Season {
SPRING, SUMMER, FALL, WINTER;
Season(){
System.out.println("Season is created");
}
public void printSeason(){
System.out.println("Season is " + this);
}
}

out:

1
2
3
4
5
6
Season is created
Season is created
Season is created
Season is created
SPRING
Season is SPRING

Enum类常用方法

我们自定义的枚举类默认继承于java.lang.Enum类,例如默认重写了toString()方法,以及提供了很多常用方法。

  • value():返回枚举类中所有的值(返回一个数组)

    1
    2
    3
    4
    Season[] values = Season.values();
    for (Season s : values) {
    System.out.println(s);
    }

    out:

    1
    2
    3
    4
    SPRING
    SUMMER
    FALL
    WINTER
  • valueOf(String str):返回枚举类中对象名为str的对象,如果没有str为名的枚举类。则抛出错误。

    1
    2
    Season summer = Season.valueOf("SUMMER");
    System.out.println(summer);//out:SUMMER

enum关键词枚举类实现接口

一:枚举类实现接口

1
2
3
4
5
6
7
8
9
10
11
12
enum Season implements Info {
SPRING, SUoMMER, FALL, WINTER;

@Override
public void show() {
System.out.println(this);
}
}

interface Info{
void show();
}

二:枚举类对象实现接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
enum Season implements Info {
SPRING{
@Override
public void show() {}
},
SUMMER{
@Override
public void show() {}
},
FALL{
@Override
public void show() {}
},
WINTER{
@Override
public void show() {}
};
}