zoukankan      html  css  js  c++  java
  • Java 枚举

    一、定义

    enum Week{
        Mon,Tue,Wen,Thu,Fri,Sat,Sun
    }

    enum实际上是继承自java.lang.Enum的子类

    枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中

    上面的Week一共调用了7次这个构造函数。

    二、拓展

    我们可以把enum看作是普通的类,除了他不能继承其他的类以外,(默认已经继承自Enum了)。

    一个简单的例子

    enum Week1{
        Mon(1),Tue(2),Wen(3),Thu(4),Fri(5),Sat(6),Sun(0);
        
        int value;
        Week1(int value){
            this.value=value;
        }
        public int getValue() {
            return value;
        }
    }

    在enum中我们增加了value,并且重新写了他 的构造函数,初始化他的value值。

    事实上上面的enum等价于

    class week1{
        public static final week1 MON=new week1(1);
        public static final week1 TUE=new week1(2);
        public static final week1 WED=new week1(3);
        public static final week1 THU=new week1(4);
        public static final week1 FRI=new week1(5);
        public static final week1 SAT=new week1(6);
        public static final week1 SUN=new week1(0);
        
        private int value;
        week1(int value){
            this.value=value;
        }
        public int getValue() {
            return value;
        }
    }

    enum的好处就在于可以方便的做相关的常量的定义和处理。

    三、相关方法介绍

             
    //values返回整个enum的数组
    for(Week w:Week.values()){ System.out.println(w); }
    //使用switch非常的方便 Week w
    =Week.Tue; switch (w) { case Mon: System.out.println("Mon"); break; case Tue: System.out.println(Week.Tue); } //反射获得父类 System.out.println("getDeclaringClass(): " + w.getDeclaringClass().getName()); //name() 和 toString() System.out.println("name(): " + w.name()); System.out.println("toString(): " + w.toString()); //ordinal(), 返回值是从 0 开始 System.out.println("ordinal(): " + w.ordinal());

    四:EnumSet和EnumMap

    public class Test {
        public static void main(String[] args) {
            // EnumSet的使用
            EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class);
            for (EnumTest day : weekSet) {
                System.out.println(day);
            }
     
            // EnumMap的使用
            EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class);
            weekMap.put(EnumTest.MON, "星期一");
            weekMap.put(EnumTest.TUE, "星期二");
            // ... ...
            for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) {
                Entry<EnumTest, String> entry = iter.next();
                System.out.println(entry.getKey().name() + ":" + entry.getValue());
            }
        }
    }

    关于enum最重要的是知道,他的原理,其实就是java通过这样的一个关键字,使得你能够很方便的使用一些常量。

    本事上还是class,这个class的结构你也一定要清楚。

  • 相关阅读:
    课后作业02-需求分析
    2018年春季个人阅读计划
    eclipse 导入项目后,在工程图标上出现红叉,但是工程中的文件并没有提示错误的解决方法
    阅读博客——我们应当怎样做需求分析? ------阅读笔记
    网络记事本第一天
    软件工程第九周总结
    软件工程第八周总结
    全球疫情web制作进度
    构建之法阅读笔记03
    软件工程第七周总结
  • 原文地址:https://www.cnblogs.com/Coder-Pig/p/6611878.html
Copyright © 2011-2022 走看看