一:如何自定义枚举类

类的对象只有有限个、确定的。
当需要定义一族常量时,强烈建议使用枚举类。

案例:

  1. /**
  2. * 一:枚举类的使用
  3. * 1.类的对象只有有限个、确定的,我们称此为枚举类
  4. * 2.如果枚举类当中只有一个对象,则可以作为单例模式的一种实现方式
  5. * 二:如何定义枚举类
  6. * 1.JDK 5.0之前,自定义枚举类
  7. * 2.JDK 5.0之后,可以使用enum关键字定义枚举类
  8. */
  9. //自定义枚举类
  10. class Season{
  11. //1.声明Season对象的属性:private final修饰
  12. private final String seasonName;
  13. private final String seasonDesc;
  14. //2.私有化类的构造器,并给对象属性赋值
  15. private Season(String seasonName, String seasonDesc) {
  16. this.seasonName = seasonName;
  17. this.seasonDesc = seasonDesc;
  18. }
  19. //3.提供当前枚举类的多个(全部)对象:public static final修饰
  20. public static final Season SPRING = new Season("春天","春暖花开");
  21. public static final Season SUMMER = new Season("夏天","夏日炎炎");
  22. public static final Season AUTUMN = new Season("秋天","秋高气爽");
  23. public static final Season WINTER = new Season("冬天","冰天雪地");
  24. //其他诉求1:获取枚举类对象的属性
  25. public String getSeasonName() {
  26. return seasonName;
  27. }
  28. public String getSeasonDesc() {
  29. return seasonDesc;
  30. }
  31. //其他诉求2:提供toString()方法
  32. @Override
  33. public String toString() {
  34. return "Season{" +
  35. "seasonName='" + seasonName + '\'' +
  36. ", seasonDesc='" + seasonDesc + '\'' +
  37. '}';
  38. }
  39. }
  40. //测试
  41. public class SeasonTest {
  42. public static void main(String[] args) {
  43. Season spring = Season.SPRING;
  44. System.out.println(spring);
  45. }
  46. }

二:如何使用关键字enum定义枚举类(重点)

  1. /**
  2. * 使用enum关键字定义枚举类
  3. * 说明:定义的枚举类默认继承自java.lang.Enum
  4. */
  5. //在类名前使用enum关键字,声明此类是一个枚举类
  6. enum Season1{
  7. //1.提供当前枚举类的多个(全部)对象,多个对象之前用“,”隔开,最后一个对象用";"结束。(省略了许多关键字,将提供对象提到了最上面)
  8. SPRING("春天","春暖花开"),
  9. SUMMER("夏天","夏日炎炎"),
  10. AUTUMN("秋天","秋高气爽"),
  11. WINTER("冬天","冰天雪地");
  12. //1.声明Season1对象的属性:private final修饰
  13. private final String seasonName;
  14. private final String seasonDesc;
  15. //2.私有化类的构造器,并给对象属性赋值
  16. private Season1(String seasonName, String seasonDesc) {
  17. this.seasonName = seasonName;
  18. this.seasonDesc = seasonDesc;
  19. }
  20. //其他诉求1:获取枚举类对象的属性
  21. public String getSeasonName() {
  22. return seasonName;
  23. }
  24. public String getSeasonDesc() {
  25. return seasonDesc;
  26. }
  27. }
  28. //测试
  29. public class SeasonTest1 {
  30. public static void main(String[] args) {
  31. Season1 spring = Season1.SPRING;
  32. //演示toString()
  33. System.out.println(spring.toString());//输出结果:SPRING
  34. //演示values()
  35. Season1[] values = Season1.values();
  36. for (int i = 0; i < values.length; i++) {
  37. System.out.println(values[i]);
  38. }
  39. //演示valueOf(String objStr)
  40. Season1 winter = Season1.valueOf("WINTER");
  41. System.out.println(winter);
  42. }
  43. }

三:Enum类的主要方法(重点)

  1. values():返回枚举类的对象数组。该方法可以很方便地遍历所有的枚举值。
  2. valueOf(String objStr):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行异常:lllegalArgumentException.
  3. toString():返回当前枚举类对象常量的名称。

四:实现接口的枚举类

  1. /**
  2. * 使用enum关键字定义的枚举类实现接口的情况
  3. * 情况一:实现接口,在enum类中实现抽象方法。
  4. * 情况二:让枚举类的对象分别实现接口中的抽象方法。
  5. */
  6. //定义接口
  7. interface Info{
  8. void show();
  9. }
  10. //定义枚举类
  11. enum Season2 implements Info{
  12. //情况二:让枚举类的对象分别实现接口中的抽象方法。
  13. SPRING("春天","春暖花开"){
  14. @Override
  15. public void show() {
  16. System.out.println("这是春天。");
  17. }
  18. },
  19. SUMMER("夏天","夏日炎炎"){
  20. @Override
  21. public void show() {
  22. System.out.println("这是夏天。");
  23. }
  24. },
  25. AUTUMN("秋天","秋高气爽"){
  26. @Override
  27. public void show() {
  28. System.out.println("这是秋天。");
  29. }
  30. },
  31. WINTER("冬天","冰天雪地"){
  32. @Override
  33. public void show() {
  34. System.out.println("这是冬天。");
  35. }
  36. };
  37. //1.声明Season1对象的属性:private final修饰
  38. private final String seasonName;
  39. private final String seasonDesc;
  40. //2.私有化类的构造器,并给对象属性赋值
  41. private Season2(String seasonName, String seasonDesc) {
  42. this.seasonName = seasonName;
  43. this.seasonDesc = seasonDesc;
  44. }
  45. //情况一:实现接口中的方法
  46. /*@Override
  47. public void show() {
  48. System.out.println("这是一个季节。");
  49. }*/
  50. }
  51. //测试
  52. public class SeasonTest2 {
  53. public static void main(String[] args) {
  54. Season2 spring = Season2.SPRING;
  55. spring.show();
  56. }
  57. }