Java-枚举(Enum)
1.枚举概述
枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常熟。当一个变量有几种固定可能的取值时,就可以将其定义为枚举类型。
1.1 声明枚举
Java中枚举是一个特殊的类,使用enum关键字来定义,常量之间使用逗号','来分割。
可定义枚举名称、可访问性基础类型和成员等,声明格式如下:
enum-modifiers enum enumname:enum-base {
enum-body,
}
- enum-modifiers 枚举可访问性,包含public,private,internal (同一应用程序集内部(单独的项目,而不是整个解决方案)
- enumname 枚举名称
- enum-base 枚举的基础类型 (默认为int)
- enum-body 枚举的成员(枚举类型的命名常数)
注:任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔。
2.枚举类
如1.1所述,Java中的枚举为特殊的类,均继承自java.lang.Enum类。每个枚举类型成员可看作为一个Enum类的实例,默认被final,public,static修饰,使用枚举类型成员时直接使用枚举名称调用成员即可。
枚举实例常调用的Enum类方法如下:
一些具体用法:
public class EnumTest {
public static void main(String[] args){
System.out.println(SexEnum.valueOf("male").ordinal());
System.out.println(SexEnum.values()[0].ordinal());
}
}
enum SexEnum{
male,female;
}
3.为枚举添加方法
枚举常量可以有自己的方法,此时需注意:
需在枚举实例的最后一个成员后添加分号,且必须先定义枚举实例。
eg.创建WeekDay枚举
enum WeekDay{
Mon("Monday"),Tue("Tuesday"),Wed("Wednesday"),Thu("Thusday"),
Fri("Friday"),Sat("Saturday"),Sun("Sunday");
private String day;
WeekDay(String day) {
this.day = day;
}
public static String getDay(int i){
switch(i){
case 1:
return WeekDay.Mon.day;
case 2:
return WeekDay.Tue.day;
default:
System.out.println("Wrong Number!");
return null;
}
}
//重写了父类的方法
@Override
public String toString() {
return day;
}
}
注:若枚举类中含抽象方法,则需在枚举类中的每个对象都将其实现
enum SexEnum{
male{
public String getSex(){
return("Male");
}
},
female{
public String getSex(){
return("Female");
}
};
public abstract String getSex();
}
4.EnumMap与EnumSet
4.1 EnumMap类
EnumMap 是专门为枚举类型量身定做的 Map 实现。虽然使用其他的 Map(如 HashMap)实现也能完成枚举类型实例到值的映射,但是使用 EnumMap 会更加高效。
定义方法:Map<SexEnum, Integer> map1 = new EnumMap<SexEnum, Integer>(SexEnum.class);
4.2 EnumSet类
EnumSet 是枚举类型的高性能 Set 实现,它要求放入它的枚举常量必须属于同一枚举类型。
EnumSet 提供了许多工厂方法以便于初始化,如下所示
定义方法:
EnumSet\<SexEnum> set = EnumSet.of(SexEnum.female);
Set\<SexEnum> set1 = EnumSet.complementOf(set);
Java-枚举(Enum)的更多相关文章
- Java 枚举(enum) 详解7种常见的用法
Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...
- JAVA—枚举(Enum)学习总结
1.枚举(Enumeration) 枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式.这种传统接口已被迭代器取代,虽然Enumeration 还未被遗弃,但在现代代码 ...
- java枚举(enum)
1. 创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum (抽象类) 类的子类. enum AccountType { SAVING, FIXED, CURRE ...
- Java 枚举(enum) 详解4种常见的用法
JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 大师兄我又加上自己的理解,来帮助各位理解一下. 用法一:常量 在JDK1.5 之前,我们定义常 ...
- Java 枚举(enum) 的常见用法和开发规范
JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static final ...
- java枚举enum equal与==
原文链接:https://www.cnblogs.com/xiohao/p/7405423.html 问题 我知道Java枚举会被编译成一个包含私有构造参数和一堆静态方法的类,当去比较两个枚举的时候, ...
- Java 枚举 enum 详解
本文部分摘自 On Java 8 枚举类型 Java5 中添加了一个 enum 关键字,通过 enum 关键字,我们可以将一组拥有具名的值的有限集合创建为一种新的类型,这些具名的值可以作为常规的程序组 ...
- java枚举enum
http://www.cnblogs.com/wenruo/p/5349614.html java的枚举通过关键字enum实现.可以理解为一个类,不过这个类由编译器自动加了一些方法. static v ...
- Java枚举enum以及应用:枚举实现单例模式
枚举作为一个常规的语言概念,一直到Java5才诞生不得不说有点奇怪,以至于到现在为止很多程序员仍然更喜欢用static final的形式去命名常量而不使用,一般情况下,Java程序员用这种方式去实现枚 ...
- 再谈java枚举 ENUM
[From] http://www.cnblogs.com/rollenholt/archive/2012/11/27/2790402.html 没有枚举之前: 在没有枚举之前,我们想列举一些相关的常 ...
随机推荐
- 跟你说个笑话,硕士毕业两年,月薪10k,天天面向CV编程
"枯燥乏味的一天,又tm要开始了". 早上10:00,程序员毛毛带着路上买的早餐,打开24英寸的显示屏,去某论坛查一下昨天没有解决的bug. 9 个小时增删改查.搬砖写代码的一天又 ...
- Spring Boot自动配置原理与实践(二)
前言 在之前的博文(Spring Boot自动配置原理与实践(一))中,已经介绍了Spring boot的自动配置的相关原理与概念,本篇主要是对自动配置的实践,即自定义Starter,对原理与概念加深 ...
- Vue系列-03-vue-cli自动化工具
使用Vue-CLI创建项目 安装vue-cli脚手架 Mac安装vue-cli脚手架 lichengguo@lichengguodeMacBook-Pro ~ % sudo npm install - ...
- 问题求解与程序设计(C重新回顾:个人版)一
一.容易遗忘之转义字符 转义序列 含义 \n 换行 \t 水平制表 \\ 输出反斜杠 \a 响铃符 \'' 输出双引号 \' 输出单引号 \? 输出问号 \r 输出回车符(不换行,光标定位当前行的开始 ...
- 简单介绍无限轮播图,js源代码
无限轮播图js源代码,今天介绍一下用js简单的编写无限轮播图 <!DOCTYPE html> <html> <head> <meta charse ...
- 同步(synchronized)
转载至:https://www.cnblogs.com/dolphin0520/p/3923737.html 一.什么时候会出现线程安全问题? 在单线程中不会出现线程安全问题,而在多线程编程中,有可能 ...
- idea项目在maven projects中显示灰色的解决办法。建新建module src变成标准的文件夹
在使用idea的过程中,有时会遇到其中一个maven模块变成灰色(可以通过view - tool windows -> maven projects 现实),如下所示: 造成这个的原因可能是忽略 ...
- Mysql 中隐式转换
案例一:条件字段函数操作 假设你现在维护了一个交易系统,其中交易记录表 tradelog 包含交易流水号(tradeid).交易员 id(operator).交易时间(t_modified)等字段.为 ...
- Linux centos 安装 jenkins & 本地构建jar & 远程构建jar
一.部署 jenkins 需要的前奏 1.安装 JDK:https://www.cnblogs.com/chuyi-/p/10644440.html 2.安装tomcat:https://www.cn ...
- TCP模拟QQ聊天功能
需求: 模拟qq聊天功能:实现客户端与服务器(一对一)的聊天功能,客户端首先发起聊天,输入的内容在服务器端和客户端显示,然后服务器端也可以输入信息,同样信息在客户端和服务端显示. 提示: 客户端 1) ...