文档章节

Java基础-枚举Enum

闰土的好友猹
 闰土的好友猹
发布于 2016/11/25 09:55
字数 712
阅读 16
收藏 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);
        }
    }

}

© 著作权归作者所有

共有 人打赏支持
闰土的好友猹
粉丝 6
博文 44
码字总数 36620
作品 0
杭州
后端工程师
私信 提问
Java中枚举的线程安全性及序列化问题

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

Java填坑之路
2018/08/02
0
0
java 枚举(enum) 全面解读

简介 枚举是Java1.5引入的新特性,通过关键字enum来定义枚举类。枚举类是一种特殊类,它和普通类一样可以使用构造器、定义成员变量和方法,也能实现一个或多个接口,但枚举类不能继承其他类....

jimmie_yang
2018/10/19
0
0
Java | enum 枚举类

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

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

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

linux-tao
2017/10/24
0
0
Java中的Enum的使用与分析

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

绝影jy
2014/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux 权限

权限 0 000 --- 无权限 1 001 --x 执行权限 2 010 -w- 写权限 3 011 -wx 写和执行 4 100 r-- 读权限 5 101 r-x 读和执行 6 110 rw- 读和写 7 111 rwx 读写执行 755 : rwxr-xr-x 660 : rw-r...

忙碌的小蜜蜂
11分钟前
0
0
21分钟教会你分析MaxCompute账单

21分钟教会你分析MaxCompute账单 背景 阿里云大计算服务MaxCompute是一款商业化的大数据分析平台,其计算资源有预付费和后付费两种计费方式。并且产品每天按照project为维度进行计量计费(账...

阿里云云栖社区
15分钟前
0
0
Docker使用 linuxserver/letsencrypt 生成SSL证书最全解析及实践

本文使用 HTTP 和 DNS 两种校验方式对 Docker 下 linuxserver/letsencrypt 项目进行了实践。生成SpringBoot可用证书,使用 Nginx 的 htpasswd 来对网站进行密码保护,并测试使用 fail2ban 防...

java菜分享
15分钟前
0
0
代码吃鸡:Python-Robocode

最近看到一个很有“未来感”的新闻: 一辆特斯拉在拉斯维加斯出了车祸,撞“死”了一个……emmmm……机器人。不知道是意外还是炒作,又或者是这位机器人故意碰瓷,反正人们也无法从受害者口中...

crossin
19分钟前
0
0
什么是公网IP、内网IP和NAT转换?

搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么? 1、引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网I...

Linux就该这么学
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部