zoukankan      html  css  js  c++  java
  • java中枚举类的使用详解

     1 /*
     2  * 通过JDK5提供的枚举来做枚举类
     3  */
     4 public enum Direction2 {
     5     FRONT("前"), BEHIND("后"), LEFT("左"), RIGHT("右");
     6 
     7     private String name;
     8 
     9     private Direction2(String name) {
    10         this.name = name;
    11     }
    12 
    13     public String getName() {
    14         return name;
    15     }
    16 
    17 }

    //-------------------------

    //测试类,每一个对象都是被枚举类放进了数组中,自带索引值。

    枚举类: 格式是:只有枚举项的枚举类
              public enum 枚举类名 {

                                          枚举项1,枚举项2,枚举项3…;

              }
    注意事项
    •定义枚举类要用关键字enum
    •所有枚举类都是Enum的子类
    •枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
    •枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(“”);
    •枚举类也可以有抽象方法,但是枚举项必须重写该方法,使用匿名内部类的方式。
    •枚举在switch语句中的使用
     1 public class EnumMethodDemo {
     2     public static void main(String[] args) {
     3         // int compareTo(E o)
     4         Direction2 d21 = Direction2.FRONT;
     5         Direction2 d22 = Direction2.BEHIND;
     6         Direction2 d23 = Direction2.LEFT;
     7         Direction2 d24 = Direction2.RIGHT;
     8         System.out.println(d21.compareTo(d21));
     9         System.out.println(d21.compareTo(d24));
    10         System.out.println(d24.compareTo(d21));
    11         System.out.println("---------------");
    12         // String name()
    13         System.out.println(d21.name());
    14         System.out.println(d22.name());
    15         System.out.println(d23.name());
    16         System.out.println(d24.name());
    17         System.out.println("--------------");
    18         // int ordinal()
    19         System.out.println(d21.ordinal());
    20         System.out.println(d22.ordinal());
    21         System.out.println(d23.ordinal());
    22         System.out.println(d24.ordinal());
    23         System.out.println("--------------");
    24         // String toString()
    25         System.out.println(d21.toString());
    26         System.out.println(d22.toString());
    27         System.out.println(d23.toString());
    28         System.out.println(d24.toString());
    29         System.out.println("--------------");
    30         // <T> T valueOf(Class<T> type,String name)
    31         Direction2 d = Enum.valueOf(Direction2.class, "FRONT");
    32         System.out.println(d.getName());
    33         System.out.println("----------------");
    34         // values()
    35         // 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便
    36         Direction2[] dirs = Direction2.values();
    37         for (Direction2 d2 : dirs) {
    38             System.out.println(d2);
    39             System.out.println(d2.getName());
    40         }
    41     }
    42 }

    //----------------------

    //下面贴一个使用匿名内部类创建枚举对象实例的demo

     1 /*
     2  * 通过JDK5提供的枚举来做枚举类
     3  */
     4 public enum Direction3 {
     5     FRONT("前") {
     6         @Override
     7         public void show() {
     8             System.out.println("前");
     9         }
    10     },
    11     BEHIND("后") {
    12         @Override
    13         public void show() {
    14             System.out.println("后");
    15         }
    16     },
    17     LEFT("左") {
    18         @Override
    19         public void show() {
    20             System.out.println("左");
    21         }
    22     },
    23     RIGHT("右") {
    24         @Override
    25         public void show() {
    26             System.out.println("右");
    27         }
    28     };
    29 
    30     private String name;
    31 
    32     private Direction3(String name) {
    33         this.name = name;
    34     }
    35 
    36     public String getName() {
    37         return name;
    38     }
    39 
    40     public abstract void show();
    41 }

    //----------------

    //在switch语句中可以直接只用

    switch (dd) {
      case FRONT:
      System.out.println("你选择了前");
      break;
    case BEHIND:
      System.out.println("你选择了后");
      break;
    case LEFT:
      System.out.println("你选择了左");
      break;
    case RIGHT:
      System.out.println("你选择了右");
      break;
    }

  • 相关阅读:
    gain 基尼系数
    luogu P5826 【模板】子序列自动机 主席树 vector 二分
    牛客挑战赛39 树与异或 离线 树上莫队 树状数组 约数
    4.22 省选模拟赛 三元组 manacher 回文自动机
    4.22 省选模拟赛 最优价值 网络流 最大权闭合子图
    4.18 省选模拟赛 消息传递 树剖 倍增 线段树维护等比数列
    luogu P4008 [NOI2003]文本编辑器 splay 块状链表
    牛客挑战赛39 密码系统 后缀数组
    luogu P1526 [NOI2003]智破连环阵 搜索+最大匹配+剪枝
    luogu P4095 [HEOI2013]Eden 的新背包问题 多重背包 背包的合并
  • 原文地址:https://www.cnblogs.com/fuck1/p/5436595.html
Copyright © 2011-2022 走看看