Java枚举类
Java枚举类
枚举类的使用
枚举类的使用:
- 枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类。
- 当需要定义一组常量时,强烈建议使用枚举类。
- 如果枚举类只有一个对象, 则可以作为一种单例模式的实现方式。
枚举类的定义
如何定义枚举类:
- 方式一:jdk5.0之前,自定义枚举类。
- 枚举类对象的属性不应允许被改动,所以应该使用
private final
修饰
- 枚举类的使用
private final
修饰的属性应该在构造器中为其赋值
- 若枚举类显式的定义了带参数的构造器,则在列出枚举值时也必须对应的传入参数
- 方式二:jdk5.0,使用
enum
关键字定义枚举类。
- 必须在枚举类的第一行声明枚举类对象
- 默认继承
java.lang.Enum
父类
自定义枚举类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| package com.hncj;
public class Season{ private final String seasonName; private final String seasonDesc;
private Season(String seasonName, String seasonDesc) { this.seasonName = seasonName; this.seasonDesc = seasonDesc; }
public static final Season SPRING = new Season("春天", "春暖花开"); public static final Season SUMMER = new Season("夏天", "夏日炎炎"); public static final Season AUTUMN = new Season("秋天", "秋高气爽"); public static final Season WINTER = new Season("冬天", "凛冬将至");
public String getSeasonName() { return seasonName; }
public String getSeasonDesc() { return seasonDesc; }
@Override public String toString() { return "Season{" + "seasonName='" + seasonName + '\'' + ", seasonDesc='" + seasonDesc + '\'' + '}'; } }
class SeasonTest { public static void main(String[] args) { Season spring = Season.SPRING; System.out.println(spring); System.out.println(spring.getSeasonName()); } }
|
enum关键字定义枚举类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| package com.hncj;
public enum SeasonEnum { SPRING("春天", "春暖花开"), SUMMER("夏天", "夏日炎炎"), AUTUMN("秋天", "秋高气爽"), WINTER("冬天", "凛冬将至");
private final String seasonName; private final String seasonDesc;
private SeasonEnum(String seasonName, String seasonDesc) { this.seasonName = seasonName; this.seasonDesc = seasonDesc; } public String getSeasonName() { return seasonName; }
public String getSeasonDesc() { return seasonDesc; } }
class EnumTest{ public static void main(String[] args) { SeasonEnum autumn = SeasonEnum.AUTUMN; System.out.println(autumn); System.out.println(SeasonEnum.class.getSuperclass()); } }
|
枚举类常用方法
1、values()
方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
2、valueOf(String objName)
:返回枚举类中对象名是objName的对象。如果没有会有运行时异常: IllegalArgumentException
。
3、 toString()
:返回当前枚举类对象常量的名称。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package com.hncj;
public class EnumMethod { public static void main(String[] args) { Family family = Family.FATHER; System.out.println(family.toString()); Family[] values = Family.values(); for (Family value : values) { System.out.println(value); } Family my = Family.valueOf("MY"); System.out.println(my); } }
enum Family{ MOTHER, FATHER, MY; }
|
枚举类实现接口
和普通Java类一样,枚举类可以实现一个或多个接口。
- 若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只要统一实现该方法即可。
- 若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式,则可以让每个枚举对象分别来实现该方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| package com.hncj;
interface Info{ void show(); }
public enum SeasonEnum implements Info{ SPRING("春天", "春暖花开"){ @Override public void show() { System.out.println("春天在哪里"); } }, SUMMER("夏天", "夏日炎炎"){ @Override public void show() { System.out.println("宁夏"); } }, AUTUMN("秋天", "秋高气爽"){ @Override public void show() { System.out.println("秋天不回来"); } }, WINTER("冬天", "凛冬将至"){ @Override public void show() { System.out.println("大约在冬季"); } };
private final String seasonName; private final String seasonDesc;
private SeasonEnum(String seasonName, String seasonDesc) { this.seasonName = seasonName; this.seasonDesc = seasonDesc; }
public String getSeasonName() { return seasonName; }
public String getSeasonDesc() { return seasonDesc; }
@Override public void show() { System.out.println("四季"); } }
class EnumTest{ public static void main(String[] args) { SeasonEnum[] values = SeasonEnum.values(); for (SeasonEnum value : values) { System.out.println(value); value.show(); } } }
|