一、概述

一、枚举型常量

首先枚举是一个特殊的class,这个class相当于final static修饰,不能被继承;
所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类;
他的构造方法强制被私有化,下面有一个默认的构造方法private ColorEnum();

/**
* 每个枚举变量都是枚举类ColorEnum的实例,相当于RED=new ColorEnum(1),按序号来;
* 每个成员变量都是final static修饰;
*/
enum ColorEnum {
RED, GREEN, BLANK, YELLOW;
} //测试
public class Test {
public static void main(String[] args) {
//ordinal返回枚举变量的序号
for(ColorEnum color:ColorEnum.values()) {
System.out.println(color+" ordinal:"+color.ordinal()+" name:"+color.name());
}
// RED ordinal:0 name:RED
// GREEN ordinal:1 name:GREEN
// BLANK ordinal:2 name:BLANK
// YELLOW ordinal:3 name:YELLOW
}
}

二、带一个参数的枚举

enum TypeEnum {

    FIREWALL("firewall"),
SECRET("secretMac"),
BALANCE("f5"); private String typeName; TypeEnum(String typeName) {
this.typeName = typeName;
} /**
* 根据类型的名称,返回类型的枚举实例。
* @param typeName 类型名称
*/
public static TypeEnum fromTypeName(String typeName) {
for (TypeEnum type : TypeEnum.values()) {
if (type.getTypeName().equals(typeName)) {
return type;
}
}
return null;
} public String getTypeName() {
return this.typeName;
}
} /**
* 测试
* type:是TypeEnum类实例化对象
* typeName:实例化对象type的值
* ordinal:实例化对象type的序号(int), 排序值(默认自带的属性 ordinal 的值)
* name:实化对象的名字(String),枚举名称(即默认自带的属性 name 的值)
*/
public class Test {
public static void main(String[] args) {
String typeName = "f5";
TypeEnum type = TypeEnum.fromTypeName(typeName); System.out.println(type+",typeName:"+type.getTypeName()+",ordinal:"+type.ordinal()+",name:"+type.name());
//BALANCE,typeName:f5,ordinal:2,name:BALANCE
}
}

实际开发该怎么用呢?

package niing;

//状态封装 (0 禁用 1启用 2删除)
enum DataStatus {
DISABLE("1")
,ENABLE("2")
,DELETE("3"); private final String status; DataStatus(String status){
this.status = status;
}
public String getStatus(){
return this.status;
}
} public class Test {
public static void main(String[] args) {
//DataStatus.DELETE获得的枚举对象 相当于 new DataStatus("3") 获得的对象;
System.out.println(DataStatus.DELETE); //DELETE
//在实际开发中这样去获取枚举中定义的常量,这就好比以前在接口或者公共类中定义的 private statis final String DELETE = "2";
System.out.println(DataStatus.DELETE.getStatus()); //3
}
}

三、向枚举中添加新方法

enum SeasonEunm {
//每一个枚举变量都是枚举类SeasonEunm的实例化;
//SeasonEunm.SPRING获得的对象相当于new SeasonEunm("春","春困") 获得的对象;
SPRING("春","春困"),SUMMER("夏","夏睡"),AUTUMN("秋","秋乏"),WINTER("冬","冬眠"); //强制私有化的构造方法,因为枚举类默认继承Eunm类,被final static修饰,不能被继承;
//由于被强制private,所以不能使用new去生成枚举对象;
//在SeasonEunm.SPRING获得对象,隐式调用了下面的构造方法;
// 构造方法 ,赋值给成员变量
private SeasonEunm(String name, String value) {
this.name = name;
this.value = value;
} //添加成员变量的原因是,方便够着方法赋值,使用SeasonEunm.SPRING.getName就能获取对应的值;
private String name;
private String value; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
} //测试
public class Test {
public static void main(String[] args) {
//ordinal返回枚举变量的序号
for(SeasonEunm seasion:SeasonEunm.values()) {
System.out.println(seasion+",ordinal:"+seasion.ordinal()+",name:"+seasion.name());
System.out.println("枚举变量值:"+seasion.getName()+",枚举变量值:"+seasion.getValue());
} // SPRING,ordinal:0,name:SPRING
// 枚举变量值:春,枚举变量值:春困
// SUMMER,ordinal:1,name:SUMMER
// 枚举变量值:夏,枚举变量值:夏睡
// AUTUMN,ordinal:2,name:AUTUMN
// 枚举变量值:秋,枚举变量值:秋乏
// WINTER,ordinal:3,name:WINTER
// 枚举变量值:冬,枚举变量值:冬眠
}
}

四、覆盖枚举的方法

enum RGBEnum {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法 ,赋值给成员变量
private RGBEnum(String name, int index) {
this.name = name;
this.index = index;
} //覆盖方法 :只能使用toString方法来输出枚举变量值
@Override
public String toString() {
return this.index+"_"+this.name;
}
} //测试
public class Test {
public static void main(String[] args) {
for(RGBEnum rgb:RGBEnum.values()) {
System.out.println(rgb.toString());
}
// 1_红色
// 2_绿色
// 3_白色
// 4_黄色
}
}

二、使用

1. 根据值获取到枚举对象

定义了一个枚举:

@NoArgsConstructor
@AllArgsConstructor
@Getter
public enum StarEnum {
LiuYiFei("刘亦菲", 23),
ChenShu("陈数", 24),
WangOu("王鸥", 25); private String name;
private Integer age;
}

获取枚举对象:

package myEnum;

import org.apache.commons.lang3.EnumUtils;
import java.util.List; /**
* @author zls
* @date 2020/3/6
*/
public class EnumTest {
public static void main(String[] args) {
List enumList = EnumUtils.getEnumList(StarEnum.class);
System.out.println("enumList = " + enumList);
// enumList = [LiuYiFei, ChenShu, WangOu] StarEnum chenShu = EnumUtils.getEnum(StarEnum.class, "ChenShu");
System.out.println("chenShu = " + chenShu); // chenShu = ChenShu }
}

建议使用lang3提供的枚举工具类,而不要使用lang,使用lang会报错,此外,你也可以利用反射自己封装适用于自己的工具类。

转载:https://blog.csdn.net/newbie_907486852/article/details/81027512

java 枚举使用教程的更多相关文章

  1. 秒懂系列,超详细Java枚举教程!!!

    所有知识体系文章,GitHub已收录,欢迎Star!再次感谢,愿你早日进入大厂! GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual ...

  2. Java 枚举用法详解

    概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum 关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, GR ...

  3. Java log4j详细教程

    Java log4j详细教程 http://www.jb51.net/article/74475.htm

  4. java 枚举类型分析

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

  5. [转] java书籍(给Java程序猿们推荐一些值得一看的好书 + 7本免费的Java电子书和教程 )

    7本免费的Java电子书和教程 1. Thinking in Java (Third Edition) 本书的作者是Bruce Eckel,它一直都是Java最畅销的免费电子书.这本书可以帮助你系统的 ...

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

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

  7. 学习笔记之Java程序设计实用教程

    Java程序设计实用教程 by 朱战立 & 沈伟 学习笔记之JAVA多线程(http://www.cnblogs.com/pegasus923/p/3995855.html) 国庆休假前学习了 ...

  8. 【转】Java 枚举7常见种用法

    原文网址:http://softbeta.iteye.com/blog/1185573 Java 枚举7常见种用法 博客分类: java java枚举enmu  原创地址:http://blog.li ...

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

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

随机推荐

  1. libcurl.a 跨平台

    编译成libxxx.a文件后, 通过lipo把多个不同架构的文件合并起来成为一个文件 在build setting 设置  head search path , library search path ...

  2. 微信小程序底部弹窗动画

    第一步,在组件里编写弹窗的代码 <!-- 活动类型弹框 --> <view class='bottomModel' wx:if="{{modelFlag}}" c ...

  3. SetFileAttributes 设置属性

    #include <Windows.h> #include <tchar.h> int WINAPI _tWinMain(HINSTANCE hInstance, HINSTA ...

  4. Vue系列之 => 使用webpack-dev-server工具实现自动打包编译

    安装webpack-dev-server (webpack版本3.6.0,webpack-dev-server版本2.11.3)注意版本兼容问题,不然会有N多错误. npm i webpack-dev ...

  5. .Net Core技术研究-Span<T>和ValueTuple<T>

    性能是.Net Core一个非常关键的特性,今天我们重点研究一下ValueTuple<T>和Span<T>. 一.方法的多个返回值的实现,看ValueTuple<T> ...

  6. 【Codeforces Round】 #432 (Div. 2) 题解

    Codeforces Round #432 (Div. 2, based on IndiaHacks Final Round 2017)  A. Arpa and a research in Mexi ...

  7. 2018-2019-2 20165335 《网络对抗技术》 Exp6 信息搜集与漏洞扫描

    1.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.实践内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具 ...

  8. axios请求

    axios.get('/user?ID=12345') .then(function (response) { console.log(response); console.log(response. ...

  9. 微信小程序组件通信

    父子通信 在子组件的对应js中 properties:{ prop名字:数据类型, prop名字:{ type:数据类型, value:默认值 } } 在父组件的wxml模板中找到子组件标签 < ...

  10. 创建局域网yum服务器

    首先需要安装createrepo这个软件包,使用yum安装即可 创建软件库文件夹,比如mkdir -p /var/www/html/myrepo/x86_64, 将软件包拷贝到文件夹下. cd到该文件 ...