关于枚举的整理

以我的理解答:枚举是我们自己定义的一个集合,比如说我们数学里面所学的集合A={1、2、3},当我们要使用A这个集合的时候,我们只能够使用集合A里面的1、2、3这三个元素,不是A里面的元素我们就不可以使用。

同样,枚举和这个集合是类似的,当我们定义了一个枚举类型的时候,我们声明它里面有几个元素,在我们使用这个枚举的时候,我们只能够使用它有的元素,没有的元素我们是无法使用,系统就会报错!

枚举还有一个特点,就是可以代表数值,比如说第一个定义的元素对应的值为0,每个枚举元素从0开始,逐一增加。此时,这个数值也代表他们本身,相当于每一个元素有两个名字。

常使用的地方:我们要从另一个函数得到一个值,但是这个值只能够在一个范围内的,此时我们就可以使用枚举来定义这个范围。限制另外一个函数能够传递进来的值,只能够是枚举类型里面的元素

一、   通常定义常量方法

我们通常利用public final static 方法定义的代码如下,分别用1 表示红灯,3 表示绿灯,2 表示黄灯。

package com.csdn.myEnum;

public class Light {

    /* 红灯 */

    public final static int RED =1;

    /* 绿灯 */

    public final static int GREEN =3;

    /* 黄灯 */

    public final static int YELLOW =2;

}
 

二、   枚举类型定义常量方法

枚举类型的简单定义方法如下,我们似乎没办法定义每个枚举类型的值。比如我们定义红灯、绿灯和黄灯的代码可能如下:

public enum Light {

       RED , GREEN , YELLOW ;

}
 

我们只能够表示出红灯、绿灯和黄灯,但是具体的值我们没办法表示出来。别急,既然枚举类型提供了构造函数,我们可以通过构造函数和覆写toString 方法来实现。首先给Light 枚举类型增加构造方法,然后每个枚举类型的值通过构造函数传入对应的参数,同时覆写toString 方法,在该方法中返回从构造函数中传入的参数,改造后的代码如下:

public enum Light {

       // 利用构造函数传参

       RED (1), GREEN (3), YELLOW (2);

       // 定义私有变量

       private int nCode ;

       // 构造函数,枚举类型只能为私有

       private Light( int _nCode) {

           this . nCode = _nCode;

       }

       @Override

       public String toString() {

           return String.valueOf ( this . nCode );

       }

    }
 

三、   完整示例代码

枚举类型的完整演示代码如下:

package com.csdn.myEnum;

import java.util.EnumMap;

import java.util.EnumSet;

public class LightTest {

    // 1. 定义枚举类型

    public enum Light {

       // 利用构造函数传参

       RED (1), GREEN (3), YELLOW (2);

       // 定义私有变量

       private int nCode ;

       // 构造函数,枚举类型只能为私有

       private Light( int _nCode) {

           this . nCode = _nCode;

       }

       @Override

       public String toString() {

           return String.valueOf ( this . nCode );

       }

    }

    /**

      * @param args

      */

    public static void main(String[] args ) {

       // 1. 遍历枚举类型

       System. out .println( " 演示枚举类型的遍历 ......" );

       testTraversalEnum ();

       // 2. 演示 EnumMap 对象的使用

       System. out .println( " 演示 EnmuMap 对象的使用和遍历 ....." );

       testEnumMap ();

       // 3. 演示 EnmuSet 的使用

       System. out .println( " 演示 EnmuSet 对象的使用和遍历 ....." );

       testEnumSet ();

    }

    /**

      * 演示枚举类型的遍历

      */

    private static void testTraversalEnum() {

       Light[] allLight = Light.values ();

       for (Light aLight : allLight) {

           System. out .println( " 当前灯 name : " + aLight.name());

           System. out .println( " 当前灯 ordinal : " + aLight.ordinal());

           System. out .println( " 当前灯: " + aLight);

       }

    }

    /**

      * 演示 EnumMap 的使用, EnumMap 跟 HashMap 的使用差不多,只不过 key 要是枚举类型

      */

    private static void testEnumMap() {

       // 1. 演示定义 EnumMap 对象, EnumMap 对象的构造函数需要参数传入 , 默认是 key 的类的类型

       EnumMap<Light, String> currEnumMap = new EnumMap<Light, String>(

              Light. class );

       currEnumMap.put(Light. RED , " 红灯 " );

       currEnumMap.put(Light. GREEN , " 绿灯 " );

       currEnumMap.put(Light. YELLOW , " 黄灯 " );

       // 2. 遍历对象

       for (Light aLight : Light.values ()) {

           System. out .println( "[key=" + aLight.name() + ",value="

                  + currEnumMap.get(aLight) + "]" );

       }

    }

    /**

      * 演示 EnumSet 如何使用, EnumSet 是一个抽象类,获取一个类型的枚举类型内容 <BR/>

      * 可以使用 allOf 方法

      */

    private static void testEnumSet() {

       EnumSet<Light> currEnumSet = EnumSet.allOf (Light. class );

       for (Light aLightSetElement : currEnumSet) {

           System. out .println( " 当前 EnumSet 中数据为: " + aLightSetElement);

       }

    }

}
 

执行结果如下:

演示枚举类型的遍历 ......

当前灯 name : RED

当前灯 ordinal : 0

当前灯: 1

当前灯 name : GREEN

当前灯 ordinal : 1

当前灯: 3

当前灯 name : YELLOW

当前灯 ordinal : 2

当前灯: 2

演示 EnmuMap 对象的使用和遍历 .....

[key=RED,value= 红灯 ]

[key=GREEN,value= 绿灯 ]

[key=YELLOW,value= 黄灯 ]

演示 EnmuSet 对象的使用和遍历 .....

当前 EnumSet 中数据为: 1

当前 EnumSet 中数据为: 3

当前 EnumSet 中数据为: 2
 

用法一:常量

在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

    public enum Color {
      RED, GREEN, BLANK, YELLOW
    }  

用法二:switch

JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

    enum Signal {
        GREEN, YELLOW, RED
    }
    public class TrafficLight {
        Signal color = Signal.RED;
        public void change() {
            switch (color) {
            case RED:
                color = Signal.GREEN;
                break;
            case YELLOW:
                color = Signal.RED;
                break;
            case GREEN:
                color = Signal.YELLOW;
                break;
            }
        }
    }  

用法三:向枚举中添加新方法

如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。

    public enum Color {
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
        // 成员变量
        private String name;
        private int index;
        // 构造方法
        private Color(String name, int index) {
            this.name = name;
            this.index = index;
        }
        // 普通方法
        public static String getName(int index) {
            for (Color c : Color.values()) {
                if (c.getIndex() == index) {
                    return c.name;
                }
            }
            return null;
        }
        // get set 方法
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getIndex() {
            return index;
        }
        public void setIndex(int index) {
            this.index = index;
        }
    }  

用法四:覆盖枚举的方法

下面给出一个toString()方法覆盖的例子。

    public enum Color {
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
        // 成员变量
        private String name;
        private int index;
        // 构造方法
        private Color(String name, int index) {
            this.name = name;
            this.index = index;
        }
        //覆盖方法
        @Override
        public String toString() {
            return this.index+"_"+this.name;
        }
    }   

用法五:实现接口

所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。

    public interface Behaviour {
        void print();
        String getInfo();
    }
    public enum Color implements Behaviour{
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
        // 成员变量
        private String name;
        private int index;
        // 构造方法
        private Color(String name, int index) {
            this.name = name;
            this.index = index;
        }
    //接口方法
        @Override
        public String getInfo() {
            return this.name;
        }
        //接口方法
        @Override
        public void print() {
            System.out.println(this.index+":"+this.name);
        }
    }  

用法六:使用接口组织枚举

    public interface Food {
        enum Coffee implements Food{
            BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
        }
        enum Dessert implements Food{
            FRUIT, CAKE, GELATO
        }
    } 
时间: 2024-10-10 05:41:41

关于枚举的整理的相关文章

C# 中 枚举Enum 一些转换的方法整理

工作中 经常遇到枚举 的一些转换  特别是获取枚举备注等  特地整理下 方法以后使用 public void TestMethod1() { TestEnumOne colorEnum = TestEnumOne.Red; int colorValue = 0x0000FF; string colorStr = "Red"; string colorDes = "红色"; //枚举To枚举字符串 colorStr = colorEnum.ToString(); co

13、C#基础整理(枚举)

枚举 1.概念和作用 (1)用于存放常量,只能在定义时赋值(防止编程过程中恶意篡改,并且防止对同一事物的不同赋值--统一化) (2)定义的枚举类型需要包含该类型的所有可能的值 (3)方法.类.内部都可以定义,一般和类定义在同一个级别,这样所有类都可以用这个枚举了 2.定义: enum 类型名称{值1,值2,值3……值n} (默认索引从0开始,值不能是int类型) enum Gender//定义一种枚举类型,只有“男”.“女”两个值 { 男,//在定义枚举时,不需要加双引号 女 } 3.使用方法:

java枚举使用详解,整理的很好,只能收下。。。

java枚举使用详解 在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”. 在java中如何更好的使用这些“数据集”呢?因此枚举便派上了用场,以下代码详细介绍了枚举的用法. package com.ljq.test; /** * 枚举用法详解 * * @author jiqinlin * */public class TestEnum { /**

java枚举类 (近期读书笔记整理,复习所用,存个档

某些情况下,一个类的对象是有限而固定的. 如地球上的季节,有春夏秋冬四季,即四个对象. 这种实例有限且固定的类,被称为枚举类. 早期,通过定义类的方式,直接使用简单的静态变量来表示枚举. 如public static final int Season_spring=1;      注:左边的内容改下名字和X4 但这种方式存在诸多不便和缺陷.(如类型安全和容易混淆,后来,它进化了-- 变身: java5中新增了一个关键字,enum(与class,interface的地位相同) 它是一个特殊的类,可

java 枚举常用操作

在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. Java代码 public enum Color { } JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. Java代码 enum Signal { } public class TrafficLight { public void change() {

整理第三方类库

网络 AFNetworking:mattt大神的网络事件处理框架. XMPPFramework:XMPP,主要用于即时通讯. CocoaAsyncSocket:异步socket请求框架. Reachability:用来检查应用当前的网络连接状况,是苹果Reachability类的直接替代品,支持ARC,支持block,使用GCD方法来通知网络接口的变化. SocketRocket:WebSocket协议是一种网络协议,它的Web设计实现了浏览器与服务器的双向通讯.通过使用WebSockets,你

夏令营讲课内容整理 Day 5.

DP专场.. 动态规划是运筹学的一个分支, 求解决策过程最优化的数学方法. 我们一般把动态规划简称为DP(Dynamic Programming) 1.动态规划的背包问题 有一个容量为m的背包,有n个物品,每一个物品i的重量为w[i],价值为v[i]. 要求选择一些物品放入背包中,每种物品只能最多使用一次,使得在不超重的情况下让背包中所有物品价值总和最大. 正常向解法:设状态数组f[i][j]为把前i个物品放入一个容量为j的背包中所能获得的最大价值(以下同设),则状态转移方程为: f[i][j]

算法整理之动态规划

我现在介绍的这个版本,是从算法爱好者中看到的一个别人的漫画版本.题目:有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶.要求用程序来求出一共有多少种走法.比如,每次走1级台阶,一共走10步,这是其中一种走法.我们可以简写成 1,1,1,1,1,1,1,1,1,1.再比如,每次走2级台阶,一共走5步,这是另一种走法.我们可以简写成 2,2,2,2,2. 分析:这种问题是典型的使用动态规划解决的问题,在使用动态规划的方法之前,能想到的方法可能就是使用排列组合,这是一个非常复

C#基础整理

元旦整理书架发现一本小册子--<C#精髓>中国出版社2001年出版的,粗略翻了下关于C#的知识点挺全的虽然内容谈得很浅也有很多过时的内容(话说这本书是我在旧书店花5块钱淘的)我保留原有章节并删减部分过时和不重要内容添加一些自己觉得重要的内容,具体目录如下: 第一章   简介    什么是.NET.CLI.CLR.CIL.IL.BCL?    什么是JIT和GC,JIT和GC是如何工作的?   第二章 C#语言参考   标识符.类型.变量.表达式与运算符.语句.类型组织.继承.访问修饰符.类和结