java枚举的理解

一.概念

  • 枚举是一种独立的类型, 与class类是同级的关系.
  • 让某个类型的变量的取值只能为若干个固定值中的一个, 否则编译器会报错.
  • 枚举可以让编译器在编译的时候就可以控制程序非法赋值, 使用普通变量的方式在开发过程中无法做到.
  • JDK1.5以后, 使用关键字 enum 定义一个新的类型, 称为枚举类型.

二.不使用枚举

  • 定义EnumDemo类
/**
 * Description: demo
 * Create by liangxifeng on 2019-4-14
 */
public class EnumDemo {
    public static final int RED = 0x1;
    public static final int GREEN = 0x2;
    public static final int BLUE = 0x3;
    public int color;

    @Test
    public void test1(){
        color = RED;
        color = 4;
    }

}
  • 以上定义的类中有三个常量, 我们使用color变量可以存储三个常量的任意一个值, 但是color同时也可以存储int型的其他值, 我们并不能强制让color变量只允许存储三个常量中的任何一个值, 那么要实验这个效果, 我们就需要用到枚举.

三.使用枚举

  • 使用 enum 关键字定义枚举, 实际上相当于定义一个类, 此类继承了 Enum类而已. Enum类中定义了如下三个方法:
    java枚举的理解_第1张图片
    image.png
  • 先定义 Color 枚举类
        package com.soufang.esproject.lxf;
    
        /**
         * 定义一个枚举类型
         */
        public enum  Color {
            /**
             * 对于枚举类型来说, 以下三个常量代表的是类型为Color的枚举对象.
             *      RED是Color的一个对象
             *      GREEN也是Color的一个对象
             *      BLUE同样也是Color的一个对象.
             * 只不过这三个对象是在枚举类的内部事先给定好的, 其他的外面是不能在产生Color枚举类型对象的.
             * 也就是说枚举类型对象一定是在枚举类型内部来声明和定义的, 外部是不可以的.
             */
            RED, GREEN, BLUE;
        }
    
  • 定义Enum使用枚举类型
       package com.soufang.esproject.lxf;
      import org.junit.jupiter.api.Test;
      import java.util.Arrays;
      import java.util.EnumMap;
      import java.util.EnumSet;
      /**
       * Description: demo
       * Create by liangxifeng on 2019-4-14
       */
      public class EnumDemo {
          public static final int RED = 0x1;
          public static final int GREEN = 0x2;
          public static final int BLUE = 0x3;
          public int color;
    
          /**
           * 不使用枚举类类型, color可以存储除了以上三个常量之外, 还可以存储其他int类型的数据
           */
          @Test
          public void test1(){
              color = RED;
              color = 4;
          }
    
          /**
           * 定义一个枚举类型的变量, 因为Color是个枚举类型
           * 使用枚举类型 colorEnum只能赋值为Color中定义的三个对象.
           */
           public Color colorEnum;
          @Test
          public void test2(){
              colorEnum = Color.RED;
              //打印名称, 输出: RED
              System.out.println(colorEnum.name());
              //打印需要, 输出: 0
              System.out.println(colorEnum.ordinal());
              //打印名称,输出: RED, 与.name()一致
              System.out.println(colorEnum.toString());
              //打印所属类型, 输出: com.soufang.esproject.lxf.Color
              System.out.println(colorEnum.getClass().getName());
    
              //获取枚举中所有值, 输出: [RED, GREEN, BLUE]
              Color[] values = Color.values();
              System.out.println(Arrays.toString(values));
          }
    
          /**
           * set 和 map 的枚举类型
           */
              @Test
              public void test3(){
              /**
               * 枚举set
               * 将Color中定义的所有枚举对象赋值到set集合中, 用来管理枚举元素的集合
               */
              EnumSet set = EnumSet.allOf(Color.class);
              for (Color c: set){
                  System.out.println(c);
              }
    
              /**
               * 枚举map
               * 泛型key要用枚举类型
               */
              EnumMap map = new EnumMap<>(Color.class);
              map.put(Color.RED,"red");
              map.put(Color.GREEN,"green");
              map.put(Color.BLUE,"blue");
          }
    
      }
    

四.更多功能请查看

  • http://www.cnblogs.com/zhaoyanjun/p/5659811.html

你可能感兴趣的:(java枚举的理解)