黑马程序员技术交流社区

标题: java 枚举 enum 详解 [打印本页]

作者: 2666fff    时间: 2015-5-10 23:06
标题: java 枚举 enum 详解
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。

例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。

在java中如何更好的使用这些“数据集”呢?因此枚举便派上了用场,以下代码详细介绍了枚举的用法。

  1. package com.ljq.test;

  2. /**
  3. * 枚举用法详解
  4. *
  5. * @author jiqinlin
  6. *
  7. */
  8. public class TestEnum {
  9.     /**
  10.      * 普通枚举
  11.      *
  12.      * @author jiqinlin
  13.      *
  14.      */
  15.     public enum ColorEnum {
  16.         red, green, yellow, blue;
  17.     }
  18.    
  19.     /**
  20.      * 枚举像普通的类一样可以添加属性和方法,可以为它添加静态和非静态的属性或方法
  21.      *
  22.      * @author jiqinlin
  23.      *
  24.      */
  25.     public enum SeasonEnum {
  26.         //注:枚举写在最前面,否则编译出错
  27.         spring, summer, autumn, winter;

  28.         private final static String position = "test";

  29.         public static SeasonEnum getSeason() {
  30.             if ("test".equals(position))
  31.                 return spring;
  32.             else
  33.                 return winter;
  34.         }
  35.     }
  36.    
  37.     /**
  38.      * 性别
  39.      *
  40.      * 实现带有构造器的枚举
  41.      *
  42.      * @author jiqinlin
  43.      *
  44.      */
  45.     public enum Gender{
  46.         //通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错
  47.         //赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错
  48.         MAN("MAN"), WOMEN("WOMEN");
  49.         
  50.         private final String value;

  51.         //构造器默认也只能是private, 从而保证构造函数只能在内部使用
  52.         Gender(String value) {
  53.             this.value = value;
  54.         }
  55.         
  56.         public String getValue() {
  57.             return value;
  58.         }
  59.     }
  60.    
  61.    /**
  62.     * 订单状态
  63.     *
  64.     * 实现带有抽象方法的枚举
  65.     *
  66.     * @author jiqinlin
  67.     *
  68.     */
  69.     public enum OrderState {
  70.         /** 已取消 */
  71.         CANCEL {public String getName(){return "已取消";}},
  72.         /** 待审核 */
  73.         WAITCONFIRM {public String getName(){return "待审核";}},
  74.         /** 等待付款 */
  75.         WAITPAYMENT {public String getName(){return "等待付款";}},
  76.         /** 正在配货 */
  77.         ADMEASUREPRODUCT {public String getName(){return "正在配货";}},
  78.         /** 等待发货 */
  79.         WAITDELIVER {public String getName(){return "等待发货";}},
  80.         /** 已发货 */
  81.         DELIVERED {public String getName(){return "已发货";}},
  82.         /** 已收货 */
  83.         RECEIVED {public String getName(){return "已收货";}};
  84.         
  85.         public abstract String getName();
  86.     }
  87.    
  88.     public static void main(String[] args) {
  89.         //枚举是一种类型,用于定义变量,以限制变量的赋值;赋值时通过“枚举名.值”取得枚举中的值
  90.         ColorEnum colorEnum = ColorEnum.blue;
  91.         switch (colorEnum) {
  92.         case red:
  93.             System.out.println("color is red");
  94.             break;
  95.         case green:
  96.             System.out.println("color is green");
  97.             break;
  98.         case yellow:
  99.             System.out.println("color is yellow");
  100.             break;
  101.         case blue:
  102.             System.out.println("color is blue");
  103.             break;
  104.         }
  105.         
  106.         //遍历枚举
  107.         System.out.println("遍历ColorEnum枚举中的值");
  108.         for(ColorEnum color : ColorEnum.values()){
  109.             System.out.println(color);
  110.         }
  111.         
  112.         //获取枚举的个数
  113.         System.out.println("ColorEnum枚举中的值有"+ColorEnum.values().length+"个");
  114.         
  115.         //获取枚举的索引位置,默认从0开始
  116.         System.out.println(ColorEnum.red.ordinal());//0
  117.         System.out.println(ColorEnum.green.ordinal());//1
  118.         System.out.println(ColorEnum.yellow.ordinal());//2
  119.         System.out.println(ColorEnum.blue.ordinal());//3
  120.         
  121.         //枚举默认实现了java.lang.Comparable接口
  122.         System.out.println(ColorEnum.red.compareTo(ColorEnum.green));//-1
  123.         
  124.         //--------------------------
  125.         System.out.println("===========");
  126.         System.err.println("季节为" + SeasonEnum.getSeason());
  127.         
  128.         
  129.         //--------------
  130.         System.out.println("===========");
  131.         for(Gender gender : Gender.values()){
  132.             System.out.println(gender.value);
  133.         }
  134.       
  135.         //--------------
  136.         System.out.println("===========");
  137.         for(OrderState order : OrderState.values()){
  138.             System.out.println(order.getName());
  139.         }
  140.     }
  141.    
  142. }
复制代码

作者: kolen.j    时间: 2015-5-11 01:10
马克下,,,,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2