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 没有枚举之前: 在没有枚举之前,我们想列举一些相关的常 ...
随机推荐
- Android程序员如何通过跳槽薪资翻倍?
马爸爸总结了一句话:跳槽,要么是钱不到位,要么是受了委屈. 我给自己这次的跳槽经历做了一个分析,希望能对那些想换工作的朋友有所帮助. 许多朋友想换工作,但是对"换工作"的理解可能仅 ...
- small-spring 代码贡献者3个月,敢说精通Spring了,分享我的总结!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.为什么手写Spring 这个与我们码农朝夕相处的 Spring,就像睡在你身边的媳妇,你知 ...
- Eclipse带参数调试的方法
下面是体现带参数调试的一个代码demo,首先输出参数的数量,然后依次输出每个参数. public class ArgsEx { public static void main(String[] arg ...
- Linux的磁盘管理和文件系统
一.磁盘结构 1.1.硬盘的物理结构 盘头:硬盘有多个盘片,每盘片2面 磁头:每面一个磁头 1.2.硬盘的数据结构 扇区:盘片被分为多个扇形区域,每个扇区存放512字节的数据,硬盘的最小存储单位 磁道 ...
- Servelt&&JSP进阶
Servlet与JSP进阶 来自mkw的视频课程的总结 1.前言 内容包括 掌握Java Web核心特性,Servlet核心对象以及JSP九大内置对象.主要有以下的内容: 请求结构 && ...
- SpringCache(redis)
pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr ...
- ASP.NET Core教程:ASP.NET Core程序部署到Linux
一.前言 这篇文章我们将讲解如何将ASP.NET Core 程序部署到Linux.这里我们使用的是虚拟机里面安装的Centos7.这里的ASP.NET Core程序,以上篇文章中发布的框架依赖文件为例 ...
- 在npm Vue单页面的环境下,兄弟组件之间通信Bus
参考1:https://www.cnblogs.com/wangruifang/p/7772631.html 参考2:https://www.jianshu.com/p/b3d09c6c87bf 在m ...
- IOC--框架进阶
IOC控制反转 含义:把高层对底层的依赖 转移到由第三方决定 避免高层对底层的直接依赖 使得程序架构具有良好的扩展性和稳定性 理解:就是一种目的--解除依赖 DI依赖注入 含义:在构造对象是 可以自动 ...
- C#多线程---委托实现异步
一.概述 通过调用ThreadPool的QueueUserWorkItem方法来来启动工作者线程非常方便,但委托WaitCallback指向的是带有一个参数的无返回值的方法. 如果我们实际操作中需要有 ...