本文介绍枚举类的概念和开发过程中枚举的用法。

枚举类使用enum关键字定义,enum默认继承自Enum类,由于java单继承的特点,enum类无法再继承其他父类

一、枚举类的特性

1、简单枚举类的定义

枚举类用关键字enum定义,成员变量之间用逗号分隔,最后一个成员变量用分号结束。枚举类的命名建议加上Enum后缀。

代码如下:

public enum FruitEnum {
APPLE,
ORANGE,
BANANA,
PEAR
}

枚举的成员变量均为常量,可以通过FruitEnum.APPLE调用,构造方法被默认强制是私有,禁止通过new关键字实例化。

枚举类自带values()方法可以返回该枚举的所有实例

2、添加自定义方法

枚举类继承自Enum,默认实现了很多常用方法,包括:toString(),compareTo(),equals(),hashCode()等。

我们也可以给枚举类添加自定义方法,需要注意如下几点:

1、自定义方法必须在enum实例之后;
2、如果显示指明了构造方法,必须是默认(enum中默认既是私有)或私有
3、最后一个实例需要加分号

例如,给简单示例增加要给重写的toString()方法:

public enum FruitEnum {
APPLE,
ORANGE,
BANANA,
PEAR; @Override
public String toString() {
return "fruit:"+super.toString();
}
}

3、实现构造函数

public enum FruitEnum {
/**
* description 苹果
**/
APPLE("苹果", 1),
/**
* description 橘子
**/
ORANGE("橘子", 2),
/**
* description 香蕉
**/
BANANA("香蕉", 3),
/**
* description 梨
**/
PEAR("梨", 4),
/**
* description 猕猴桃
**/
KIWI_FRUIT("猕猴桃", 5); private String description;
private final Integer value; /**
* description 构造函数
* param [description, value]
**/
FruitEnum(String description, int value) {
this.description = description;
this.value = value;
} /**
* description 根据枚举值获取枚举对象
* param [value]
* return com.company.enumtest.FruitEnum
* author 郑晓龙
* createTime 2019/12/3 10:35
**/
public static FruitEnum getFruitEnumByValue(Integer value) {
if (value == null) {
return null;
}
for (FruitEnum fruitEnum : FruitEnum.values()) {
if (fruitEnum.ordinal() == value) {
return fruitEnum;
}
}
throw new NoSuchElementException();
} public String getDescription() {
return description;
} public Integer getValue() {
return value;
}
}

二、枚举的应用场景

1、switch语句中使用枚举

case语句中不需要写枚举类名,可以直接写枚举实例,例如:

    FruitEnum fruit = FruitEnum.KIWI_FRUIT;
switch (fruit){
case APPLE:
System.out.println("get apple!");
break;
case KIWI_FRUIT:
System.out.println("get KIWI_FRUIT!");
break;
default:
System.out.println("default");
}

2、枚举实现单例模式

由于枚举天然的静态化和不可用new实例化,可以用于单例模式

public enum Singleton {
INSTANCE;
/**
* description 无参构造函数(可以省略)
**/
private Singleton(){
System.out.println("I'm singleton");
}
public static void doSomething(){
System.out.println("I'm doing!");
} }

main方法中使用单例:

 Singleton.doSomething();
Singleton.doSomething();

执行结果:

I'm singleton
I'm doing!
I'm doing!

可以看到,当Singleton类第一次被调用时,实例化了该单例类,并执行了方法,第二次直接执行了方法。

参考:

[JAVA]枚举类型的应用的更多相关文章

  1. java 枚举类型分析

    最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enum ColorSelect { RED_BAGE = 0, GREEN_BAGE, ...

  2. 【转】java枚举类型enum的使用

    原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...

  3. 【转】掌握java枚举类型(enum type)

    原文网址:http://iaiai.iteye.com/blog/1843553 1   背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量.之前我们通常利用 ...

  4. 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)

    java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...

  5. Java 枚举类型简介

    目录 Java 枚举示例 Java 枚举构造函数 枚举类型是用于定义常量集合的特殊类型,更确切的说,JAVA枚举类型是一种特殊的 java 类.枚举类型可以包含常量.方法等.在 java5 中添加了 ...

  6. 【转载】Java枚举类型的使用

    枚举类型概念 package com.lxq.enumm; public class EnumDemoOne { private enum InnerEnum { RED, GREEN, YELLOW ...

  7. 深入理解Java枚举类型(enum)

    https://blog.csdn.net/javazejian/article/details/71333103 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(en ...

  8. Java枚举类型使用示例

    Java枚举类型使用示例 学习了:https://www.cnblogs.com/zhaoyanjun/p/5659811.html http://blog.csdn.net/qq_27093465/ ...

  9. Java枚举类型的使用,数值的二进制表示

    一.Java枚举类型的使用 首先请看这段代码: package java上课; public class EnumTest { public static void main(String[] arg ...

  10. java 枚举类型知识点记录

    在日常开发中,我们常用接口装常量或者在类里面写静态常量,java1.5以后加入了枚举类型enum.枚举类型是由一组固定的常量组成的类型.枚举本质是int值.因为枚举类型没有可以访问的构造器,所以枚举类 ...

随机推荐

  1. 00-01.Kali Linux 2020.1修改root用户密码

    安装Kali Linux 2020.1系统后,需要使用root用户权限安装软件. 由于VMWare版本的root用户默认密码未知,所以需要在单用户模式下重新设置root用户密码.操作步骤如下: 启动K ...

  2. ODEINT 求解常微分方程(1)

    An example of using ODEINT is with the following differential equation with parameter k=0.3, the ini ...

  3. [xDebug] 服务器端的配置参数

    [Xdebug] ;load xdebug extensionzend_extension_ts = path/tp/xdebug;是否开启自动跟踪xdebug.auto_trace = On;是否开 ...

  4. 小孩学习编程的绝佳游戏——CodeMonkey

    CodeMonkey于2014年1月在以色列成立.它的愿景是建立一个全球性的学习平台,让孩子们通过游戏的方式学习.发现.创造和分享,同时在此过程中获得编程这一项21世纪必备的技能. 通常提到CodeM ...

  5. apt update 提示 Release file for http://… is not valid yet (invalid for another d..)

    由于在公司里需要使用代理上网,搞了好久,好不容易把 apt 整得可以访问外网了,结果在执行 spt update 时总是提示 Release file for http://- is not vali ...

  6. CAT12提取surface指标

    介绍 基于表面的形态学分析(VSM)的方法被越来越多的研究者使用.本文主要介绍基于SPM12和CAT12工具包进行ROI-based VSM的处理步骤. 方法 本文数据处理使用的工具是MATLAB,S ...

  7. nacos基础--客户端下载

    对于nacos的作用,我在这里不在过多介绍,不知道的同学可以自行先了解,对于nacos,有官网进行介绍,对于一个初学者来说是一件非常方便的事情. 官网地址:https://nacos.io 但是在下载 ...

  8. 色彩空间转换 rgb转ycbcr422/ycbcr422转rgb

    在图像处理过程中通常需要会对图像类型进行互相转换,在此给出两种转换的工程代码. 1.在将ycbCr422转rgb时,通常先将ycbcr422转换成ycbcr444再讲ycbcr444转成rgb 1.1 ...

  9. go 项目目录结构

    网上有很多误人子弟的教程,   说项目下必须要有src,   傻逼玩意. 正确的路径应该是这样的: 所有go项目路径 src 项目1 项目2 项目N pkg bin 不是所有项目下必须建src, pk ...

  10. 恕我直言你可能真的不会java第4篇:Stream管道流Map操作

    一.回顾Stream管道流map的基础用法 最简单的需求:将集合中的每一个字符串,全部转换成大写! List<String> alpha = Arrays.asList("Mon ...