文档章节

Java基础-枚举Enum

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

枚举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
码字总数 23513
作品 0
杭州
后端工程师
Java中枚举的线程安全性及序列化问题

来源:微信公众号 ,原创: Hollis --枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和class一样,只是一个关键字...

Java填坑之路
08/02
0
0
为什么我墙裂建议大家使用枚举来实现单例

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

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

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

linux-tao
2017/10/24
0
0
枚举类型可以实现接口,以及枚举类型原理

今天在看 《漫谈设计模式》的时候,看到状态模式的时候,居然发现,枚举类型原来也是可以 实现接口的。 真是涨见识了。 而且 枚举类型的静态属性也是可以 实现方法的, 只是如果没有 实现接口...

之渊
07/24
0
0
Java中的Enum的使用与分析

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

绝影jy
2014/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

使用Newtonsoft将DataTable转Json

使用Newtonsoft将DataTable转Json Newtonsoft提供的将DataTable转成Json: /// <summary> /// DataTable转Json /// </summary> /// <param name="dt"></param> /// <ret......

DemonsI
13分钟前
0
0
centos7安装zookeeper3.4.6

注:zookeeper充当注册中心 下载地址 http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/ 单机 下载完成后,将安装包上传值服务器,解压 tar xvzf zookeeper-3.4.6.tar.gz 进入解...

码代码的小司机
14分钟前
0
0
136. Single Number

136. Single Number 题意:一个数组中所有数字都是两两相同,只有一个数字是单独的,求出这个数字的值。 很简单的题,使用异或就能处理。 异或介绍:bit位上的值不同,异或后,值为1.否则为0...

117
15分钟前
0
0
Hash和HashCode深入理解

目录介绍 1.Hash的作用介绍 1.1 Hash的定义 1.2 Hash函数特性 1.3 Hash的使用场景 2.如何判断两个对象相等 2.1 判断两个字符串 2.2 判断两个int数值 2.3 其他基本类型 3.HashCode深入分析 3....

潇湘剑雨
21分钟前
0
0
ecshop 漏洞如何修复 补丁升级与安全修复详情

目前ecshop漏洞大面积爆发,包括最新版的ecshop 3.0,ecshop 4.0,ecshop2.7.3全系列版本都存在着高危网站漏洞,导致网站被黑,被篡改,被挂马,许多商城系统深受其漏洞的攻击,给商城的运营者...

网站安全
22分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部