文档章节

Java基础-枚举Enum

xjt2016
 xjt2016
发布于 2016/11/25 09:55
字数 712
阅读 12
收藏 1
点赞 0
评论 0

枚举Enum

特点

  • enum是一个特殊的class
  • enum类的构造函数必须是私有的
  • 枚举类可以继承抽象类,实现接口
  • switch接受enum值

语法

1. 定义

enum 类名{  
    实例1,实例2,实例3.....;  
    方法、属性、构造函数  
} 

2. Simple

public class EnumDemo01 {  
    enum Fruit{  
        apple,banana,orange;  
    }  
    public static void main(String[] args) {  
        fun(Fruit.apple);  
    }  
    public static void fun(Fruit f){  
        System.out.println("fruit");  
    }  
  
} 

3. 构造函数

构造函数必须定义为私有的;

public class EnumDemo01 {  
    enum Fruit{  
        apple("1"),banana("2"),orange("3");  
        private String value;  
        //构造函数必须是私有的
        private Fruit(String value){  
            this.value = value;  
        }  
    }  
    public static void main(String[] args) {  
        fun(Fruit.apple);  
    }  
    public static void fun(Fruit f){  
        System.out.println(f.value);  
    }  
}  

4. 抽象方法

public class EnumDemo01 {  
    enum Fruit{  
        apple("1"){  
            @Override  
            public String getValue() {  
                return "苹果";  
            }  
              
        },banana("2"){  
            @Override  
            public String getValue() {  
                return "香蕉";  
            }  
        },orange("3"){  
            @Override  
            public String getValue() {  
                return "橘子";  
            }  
        };  
        private String value;  
        private Fruit(String value){  
            this.value = value;  
        }  
        public abstract String getValue();  
    }  
    public static void main(String[] args) {  
        fun(Fruit.apple);  
    }  
    public static void fun(Fruit f){  
        System.out.println(f.getValue());  
    }  
}

5. Enum类方法

常用方法:

  • Fruit.apple.name();  获取实例名称
  • Fruit.apple.ordinal(); 获取此实例的序号;
  • Fruit f = Fruit.valueOf("实例名称");  根据实例名称返回实例;
  • Fruit[] fs = Fruit.values(); 返回Fruit类全部的实例;
public class EnumDemo01 {  
    enum Fruit{  
        apple("1"){  
            @Override  
            public String getValue() {  
                return "苹果";  
            }  
              
        },banana("2"){  
            @Override  
            public String getValue() {  
                return "香蕉";  
            }  
        },orange("3"){  
            @Override  
            public String getValue() {  
                return "橘子";  
            }  
        };  
        private String value;  
        private Fruit(String value){  
            this.value = value;  
        }  
        public abstract String getValue();  
    }  
    public static void main(String[] args) {  
        fun(Fruit.apple);  
    }  
    public static void fun(Fruit f){  
        System.out.println(f.name()+"的次序:"+f.ordinal());  
        System.out.println(Fruit.valueOf("orange").getValue());  
        System.out.println(f.name());  
        Fruit[]fs = Fruit.values();  
        System.out.print("Fruit实例:");  
        for(Fruit e:fs){  
            System.out.print(e.getValue()+"、");  
        }  
    }  
}  

6. 完整演示代码

package com.melon.basic.enumeration;


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是一个抽象类,获取一个类型的枚举类型内容可以使用allOf方法
     */

    private static void testEnumSet() {
        EnumSet<Light> currEnumSet = EnumSet.allOf(Light.class);
        for (Light aLightSetElement : currEnumSet) {
            System.out.println("当前EnumSet中数据为:" + aLightSetElement);
        }
    }

}

© 著作权归作者所有

共有 人打赏支持
xjt2016
粉丝 5
博文 43
码字总数 20706
作品 0
杭州
后端工程师
为什么我墙裂建议大家使用枚举来实现单例

我们知道,单例模式,一般有七种写法,那么这七种写法中,最好的是哪一种呢?为什么呢?本文就来抽丝剥茧一下。 哪种写单例的方式最好 在StakcOverflow中,有一个关于What is an efficient ...

冷_6986
06/13
0
0
几种Java 枚举查找且不抛异常的实现及其优劣比较

导读 Java Enum是一个非常有用的功能,但很多人通常并不能充分利用,这是因为一些库不会优先择用该功能。通常我们也可以正确使用Java枚举功能,但在许多代码库中往往存在着这样一个问题,于是...

linux-tao
2017/10/24
0
0
Java | enum 枚举类

simple 我们以用户状态写一个枚举类 测试类 效果 遍历 我们可以通过反射,或者通过提供的values()方法进行遍历。 测试代码: 效果: 使用 在写项目的时候,经常会用到枚举类。我们来写一个例...

Wenyi_Feng
06/24
0
0
Java中的Enum的使用与分析

示例: public enum EnumTest { } Java中枚举实现的分析: 示例: public enum Color{ } 显然, enum很像特殊的class,实际上enum声明定义的类型就是一个类。 而这些类都是类库中Enum类的子类...

绝影jy
2014/05/08
0
0
高阶Java枚举类型enum使用详解

java的Enum枚举类型终于在j2se1.5出现了。之前觉得它只不过是鸡肋而已,可有可无。毕竟这么多年来,没有它,大家不都过得很好吗?今日看《Thinking in Java》4th edition,里面有一句话“有时...

wolf_su
2013/07/22
0
1
Java 语言中 Enum 类型的使用介绍

Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中。而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常...

F风向标F
2014/04/15
0
0
Java语言学习(十一):枚举类型和泛型

Java中一个重要的类型:枚举,它可以用来表示一组取值范围固定的变量,使用 enum 关键字定义枚举类型,其中元素不能重复,通常大写表示。利用Java的反射机制,可以在运行时分析类,如查看枚举...

海岸线的曙光
前天
0
0
Kotlin2.3表示和处理选择:枚举和when

这一节讨论when的结构,它可以被认为是Java中switch结构的替代品,但是它更强大,也使用得更频繁。 2.3.1声明枚举类 声明一个简单的枚举类 这是极少数Kotlin声明比Java更多关键字的例子,在K...

无心下棋
05/12
0
0
android 自定义控件 属性介绍

一、控件自定义属性介绍 以下示例中代码均在values/attrs.xml 中定义,属性均可随意命名。 1. reference:参考某一资源ID。 示例: [java] 代码如下: <declare-styleable name = "名称"> <a...

一寨之主
2014/02/10
0
0
为什么我墙裂建议大家使用枚举来实现单例。

关于单例模式,我的博客中有很多文章介绍过。作为23种设计模式中最为常用的设计模式,单例模式并没有想象的那么简单。因为在设计单例的时候要考虑很多问题,比如线程安全问题、序列化对单例的...

06/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0
There is no session with id[xxx]

参考网页 https://blog.csdn.net/caimengyuan/article/details/52526765 报错 2018-07-19 23:04:35,330 [http-nio-1008-exec-8] DEBUG [org.apache.shiro.web.servlet.SimpleCookie] - Found......

karma123
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部