1.枚举

1.1 概述【理解】

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

1.2 定义格式【应用】

  • 格式

    1. public enum s {
    2. 枚举项1,枚举项2,枚举项3;
    3. }
    4. 注意: 定义枚举类要用关键字enum
  • 示例代码

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

1.3 枚举的特点【理解】

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

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

    }, SUMMER(“夏”){

    1. @Override
    2. public void show() {
    3. System.out.println(this.name);
    4. }

    }, AUTUMN(“秋”){

    1. @Override
    2. public void show() {
    3. System.out.println(this.name);
    4. }

    }, WINTER(“冬”){

    1. @Override
    2. public void show() {
    3. System.out.println(this.name);
    4. }

    }; public String name; //空参构造 //private Season(){} //有参构造 private Season(String name){

    1. this.name = name;

    }

    //抽象方法 public abstract void show(); }

public class EnumDemo { public static void main(String[] args) { / 1.所有枚举类都是Enum的子类 2.我们可以通过”枚举类名.枚举项名称”去访问指定的枚举项 3.每一个枚举项其实就是该枚举的一个对象 4.枚举也是一个类,也可以去定义成员变量 5.枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的, 但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略 6.枚举类可以有构造器,但必须是private的,它默认的也是private的。 枚举项的用法比较特殊:枚举(“”); 7.枚举类也可以有抽象方法,但是枚举项必须重写该方法 /

  1. //第二个特点的演示
  2. //我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
  3. System.out.println(Season.SPRING);
  4. System.out.println(Season.SUMMER);
  5. System.out.println(Season.AUTUMN);
  6. System.out.println(Season.WINTER);
  7. //第三个特点的演示
  8. //每一个枚举项其实就是该枚举的一个对象
  9. Season spring = Season.SPRING;
  10. }

}

  1. <a name="624d2a46"></a>
  2. ### 1.4 枚举的方法【应用】
  3. - 方法介绍
  4. | 方法名 | 说明 |
  5. | --- | --- |
  6. | String name() | 获取枚举项的名称 |
  7. | int ordinal() | 返回枚举项在枚举类中的索引值 |
  8. | int compareTo(E o) | 比较两个枚举项,返回的是索引值的差值 |
  9. | String toString() | 返回枚举常量的名称 |
  10. | static T valueOf(Class type,String name) | 获取指定枚举类中的指定名称的枚举值 |
  11. | values() | 获得所有的枚举项 |
  12. - 示例代码
  13. ```java
  14. public enum Season {
  15. SPRING,SUMMER,AUTUMN,WINTER;
  16. }
  17. public class EnumDemo {
  18. public static void main(String[] args) {
  19. // String name() 获取枚举项的名称
  20. String name = Season.SPRING.name();
  21. System.out.println(name);
  22. System.out.println("-----------------------------");
  23. // int ordinal() 返回枚举项在枚举类中的索引值
  24. int index1 = Season.SPRING.ordinal();
  25. int index2 = Season.SUMMER.ordinal();
  26. int index3 = Season.AUTUMN.ordinal();
  27. int index4 = Season.WINTER.ordinal();
  28. System.out.println(index1);
  29. System.out.println(index2);
  30. System.out.println(index3);
  31. System.out.println(index4);
  32. System.out.println("-----------------------------");
  33. // int compareTo(E o) 比较两个枚举项,返回的是索引值的差值
  34. int result = Season.SPRING.compareTo(Season.WINTER);
  35. System.out.println(result);//-3
  36. System.out.println("-----------------------------");
  37. // String toString() 返回枚举常量的名称
  38. String s = Season.SPRING.toString();
  39. System.out.println(s);
  40. System.out.println("-----------------------------");
  41. // static <T> T valueOf(Class<T> type,String name)
  42. // 获取指定枚举类中的指定名称的枚举值
  43. Season spring = Enum.valueOf(Season.class, "SPRING");
  44. System.out.println(spring);
  45. System.out.println(Season.SPRING == spring);
  46. System.out.println("-----------------------------");
  47. // values() 获得所有的枚举项
  48. Season[] values = Season.values();
  49. for (Season value : values) {
  50. System.out.println(value);
  51. }
  52. }
  53. }