java枚举使用详解

转载 2015年11月20日 09:02:37

在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。

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

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


package com.ljq.test;

/**
 * 枚举用法详解
 * 
 * @author jiqinlin
 * 
 */
public class TestEnum {
    /**
     * 普通枚举
     * 
     * @author jiqinlin
     *
     */
    public enum ColorEnum {
        red, green, yellow, blue;
    }
    
    /**
     * 枚举像普通的类一样可以添加属性和方法,可以为它添加静态和非静态的属性或方法
     * 
     * @author jiqinlin
     *
     */
    public enum SeasonEnum {
        //注:枚举写在最前面,否则编译出错
        spring, summer, autumn, winter;

        private final static String position = "test";

        public static SeasonEnum getSeason() {
            if ("test".equals(position))
                return spring;
            else
                return winter;
        }
    }
    
    /**
     * 性别
     * 
     * 实现带有构造器的枚举
     * 
     * @author jiqinlin
     *
     */
    public enum Gender{
        //通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错
        //赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错
        MAN("MAN"), WOMEN("WOMEN");
        
        private final String value;

        //构造器默认也只能是private, 从而保证构造函数只能在内部使用
        Gender(String value) {
            this.value = value;
        }
        
        public String getValue() {
            return value;
        }
    }
    
   /**
    * 订单状态
    * 
    * 实现带有抽象方法的枚举
    * 
    * @author jiqinlin
    *
    */
    public enum OrderState {
        /** 已取消 */
        CANCEL {public String getName(){return "已取消";}},
        /** 待审核 */
        WAITCONFIRM {public String getName(){return "待审核";}},
        /** 等待付款 */
        WAITPAYMENT {public String getName(){return "等待付款";}},
        /** 正在配货 */
        ADMEASUREPRODUCT {public String getName(){return "正在配货";}},
        /** 等待发货 */
        WAITDELIVER {public String getName(){return "等待发货";}},
        /** 已发货 */
        DELIVERED {public String getName(){return "已发货";}},
        /** 已收货 */
        RECEIVED {public String getName(){return "已收货";}};
        
        public abstract String getName();
    }
    
    public static void main(String[] args) {
        //枚举是一种类型,用于定义变量,以限制变量的赋值;赋值时通过“枚举名.值”取得枚举中的值
        ColorEnum colorEnum = ColorEnum.blue;
        switch (colorEnum) {
        case red:
            System.out.println("color is red");
            break;
        case green:
            System.out.println("color is green");
            break;
        case yellow:
            System.out.println("color is yellow");
            break;
        case blue:
            System.out.println("color is blue");
            break;
        }
        
        //遍历枚举
        System.out.println("遍历ColorEnum枚举中的值");
        for(ColorEnum color : ColorEnum.values()){
            System.out.println(color);
        }
        
        //获取枚举的个数
        System.out.println("ColorEnum枚举中的值有"+ColorEnum.values().length+"个");
        
        //获取枚举的索引位置,默认从0开始
        System.out.println(ColorEnum.red.ordinal());//0
        System.out.println(ColorEnum.green.ordinal());//1
        System.out.println(ColorEnum.yellow.ordinal());//2
        System.out.println(ColorEnum.blue.ordinal());//3
        
        //枚举默认实现了java.lang.Comparable接口
        System.out.println(ColorEnum.red.compareTo(ColorEnum.green));//-1
        
        //--------------------------
        System.out.println("===========");
        System.err.println("季节为" + SeasonEnum.getSeason());
        
        
        //--------------
        System.out.println("===========");
        for(Gender gender : Gender.values()){
            System.out.println(gender.value);
        }
       
        //--------------
        System.out.println("===========");
        for(OrderState order : OrderState.values()){
            System.out.println(order.getName());
        }
    }
    
}


Java枚举类型详解(原理+用法)

可以这么说,Java的枚举类型本来是不存在的,但Java发了个"语法糖",就有了枚举类型。Java从JDK1.5开始支持枚举,通常一个特性如果在一开始没有提供,在语言发展后期才添加,会遇到一个问题,就...
  • JobsandCzj
  • JobsandCzj
  • 2017年03月02日 09:37
  • 583

使用接口组织枚举

自己下载调试了一下,页面关了。 雷同太多找不到想不起来是谁了。来自互联网。 枚举还有很多其他用法,这种没用过mark一下,工作中遇到再来补充性能测试。 package enumerated.menu;...
  • lidachao01
  • lidachao01
  • 2016年12月26日 18:52
  • 1186

Java基础之枚举妙用

对于枚举,初学Java的时候可能我们就已经接触过了,但是在毕业前,其实一直都不知道真正工作里面枚举是怎么用的,枚举有什么用?接下来,博主就介绍枚举在实际工作中的一种使用场景,本文只适合初级的小菜鸟看哈...
  • u013142781
  • u013142781
  • 2016年01月06日 19:00
  • 4070

Java的枚举类型使用方法详解

1.背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量。之前我们通常利用public final static 方法定义的代码如下,分别用1 表示春天,2表...
  • gh8609123
  • gh8609123
  • 2016年08月26日 12:49
  • 1457

java 枚举——java(android)中枚举的运用和使用场景

如果作为一个java开发工程师还不了解或者还不能很好的运用枚举这个新特性的话,那你就得好好看一看枚举了。因为枚举在java5以后是个很好用的新特性。...
  • yehui928186846
  • yehui928186846
  • 2016年05月16日 16:57
  • 3864

java 枚举enum的使用(与在switch中的使用)

实际开发中,很多人可能很少用枚举类型。更多的可能使用常量的方式代替。但枚举比起常量来说,含义更清晰,更容易理解,结构上也更加紧密。看其他人的博文都很详细,长篇大论的,这里理论的东西不说了,一起看看在实...
  • KokJuis
  • KokJuis
  • 2017年06月09日 14:53
  • 5153

关于java枚举使用和理解。

前言在介绍枚举之前,先说说另外一个名词:[魔法数字]。 魔法数字,是指在代码中直接出现的数值。 如:user.setStatus(1);其中的数值1即为[魔法数字],你很难直观的理解这个1代表的含...
  • u014387604
  • u014387604
  • 2015年10月22日 16:53
  • 611

JAVA 枚举使用详解

问题引入:如何限制用户输入class Student{ private String name; // 考试等级 private String grade; //等级只能是AB...
  • guanhang89
  • guanhang89
  • 2016年08月20日 18:41
  • 2044

[疯狂Java]集合:EnumSet、各Set性能分析(选择)

1. EnumSet——专门存放枚举类型元素的Set:     1) EnumSet只能存放一种枚举类型的元素,具体存放什么枚举类型的元素可以通过两种方法指定,一种是显式,一种是隐式;     2) ...
  • Lirx_Tech
  • Lirx_Tech
  • 2016年05月27日 15:41
  • 1390

java枚举的实际应用案例

java枚举知识点来自jdk5.0的版本带来的新特性,下面讲解的内容分别是:  1.枚举类型    2.枚举中的参数、方法    3.遍历 在实际中对于一些基本固定的值用枚举比较好,当然...
  • fengchao2016
  • fengchao2016
  • 2016年10月08日 14:32
  • 2815
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java枚举使用详解
举报原因:
原因补充:

(最多只允许输入30个字)