zoukankan      html  css  js  c++  java
  • 枚举

    enum Color
    {
     RED,GREEN,BLUE;
    }
    public class EnumDemo {
     public static void main(String args[])
     {
      Color c=Color.RED;
      System.out.println(Color.RED+""+Color.BLUE);
     }
    }

    Enum类和enum关键字的区别

    使用enum关键字可以定义一个枚举类型,那么实际上就相当于定义了一个类,此类继承了Enum类而已。

    在Enum类的构造方法中是受保护的,实际上对于每一个枚举对象一旦声明之后,就表示自动调用此构造方法,所有的编号采用自动编号的方式进行。

    enum Color
    {
     RED,GREEN,BLUE;
    }
    public class EnumDemo {
     public static void main(String args[])
     {
      Color c=Color.RED;
      System.out.println(Color.RED+""+Color.BLUE);
         for(Color c1:Color.values())
         {
          System.out.println(c1);
          //输出枚举值和其中的自动编号
          System.out.println(c1.name()+"--->"+c1.ordinal());
         }
     }
    }

    类集对枚举的支持

    EnumMap

    EnumMap是Map的子类,与Map的操作是一致

    import java.awt.Color;
    import java.util.EnumMap;
    import java.util.Map;
    public class EnumMapDemo {
     public static void main(String args[])
     {
      EnumMap<Color,String> eMap=new EnumMap<Color,String>(Color.class);
         eMap.put(Color.RED, "红色"); 
         eMap.put(Color.GREEN, "绿色");
         eMap.put(Color.BLUE, "蓝色");
         for(Map.Entry<Color, String> me:eMap.entrySet())
         {
          System.out.println(me.getKey()+"-->"+me.getValue());
         }
     }
    }

    EnumSet

    EnumSet本身是Set接口的子类,但是在此类中并没有任何的构造方法定义,表示构造方法被私有化了。此类的方法都是静态的操作。

    import java.awt.Color;
    import java.util.EnumSet;
    import java.util.Iterator;
    public class EnumSetDemo {
     public static void main(String args[])
     {
      //表示将全部的内容保存到集合
      EnumSet<Color> eSet=EnumSet.allOf(Color.class);
         Iterator<Color> iter=eSet.iterator();
         while(iter.hasNext())
         {
          System.out.println(iter.next());
         }

      //表示此类型的空集合

      //EnumSet<Color> eSet=EnumSet.noneOf(Color.class);
     }
    }

     枚举的构造方法

    可以在枚举中直接定义构造方法,但是一旦构造方法定义之后,则所有枚举对象都必须明确的调用此构造方法。

    enum Color
    {
     RED("红色"),GREEN("绿色"),BLUE("蓝色");
     private String name;
        Color(String name)
        {
          this.name=name; 
        }
    }

    枚举中的构造方法为默认的private权限

    System.out.println(c1.name()+"--->"+c1.ordinal()+"---->"c1.getName());


    让枚举实现一个接口

    一个枚举实现一个接口之后,各个枚举对象都必须实现接口中的抽象方法


    interface Info
    {
     public String getColor();
    }
    enum Color implements Info
    {
     RED
     {
      public String getColor()
      {
       return "红色";
      }
     },
     GREEN
     {
         public String getColor()
         {
          return "绿色";
         }
     },
     BLUE
     {
         public String getColor()
         {
          return "蓝色";
         }
     };
    }
    public class EnumDemo5 {
     public static void main(String args[])
     {
      for(Color c:Color.values())
      {
       System.out.println(c.ordinal()+"---->"+c.getColor()+"---->"+c.getName());
      }
     }
    }

     在枚举中定义抽象方法

    在一个枚举中也可以定义多个抽象方法,枚举中的每个对象都必须单独实现。

  • 相关阅读:
    nextSibling VS nextElementSibling
    线程实现连续启动停,并在某一时间段内运行
    线程:安全终止与重启
    监控知识体系
    后台服务变慢解决方案
    Java泛型类型擦除以及类型擦除带来的问题
    常见的 CSRF、XSS、sql注入、DDOS流量攻击
    Spring对象类型——单例和多例
    一次线上OOM过程的排查
    深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列
  • 原文地址:https://www.cnblogs.com/jinzhengquan/p/1948794.html
Copyright © 2011-2022 走看看