中秋佳节--理解Enum枚举
一.Enum枚举的作用
1.使用枚举可以限定取值范围,枚举中定义的每个常量都可以理解为对象;
Eg:
Public enum Color{ RED, GREEN,BULE; }
说明:RED实际上就表示的是枚举的名称,默认的编号是0,可以使用ordinal()方法获得。
2.使用enum关键字定义枚举类,其中包含的对象可以初始化定义(初始化构造函数)
Eg:
package cn.test.java.enums;
enum ColorDemo{
RED("红色"),GREEN("绿色"),BLUE("蓝色"); private String name;
private ColorDemo(String name){
this.setName(name);
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
public class ConstructorEnum { public static void main(String[] args) {
for(ColorDemo c : ColorDemo.values()){
System.out.println(c.ordinal()+"--->"+c.name()+"("+c.getName()+")");
}
}
}
说明:在枚举类中定义属性及自己的构造方法,但是一旦定义有参数构造之后,在声明枚举对象的时候,就必须明确的调用构造方法,并进行传递参数。
3.在枚举中实际上已经实现好Comparable接口,所以枚举中的内容是可以排序的;
Eg:
package cn.test.java.enums;
enum ColorDemo{
RED("红色"),GREEN("绿色"),BLUE("蓝色"); private String name;
private ColorDemo(String name){
this.setName(name);
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
public class ConstructorEnum { public static void main(String[] args) {
for(ColorDemo c : ColorDemo.values()){
System.out.println(c.ordinal()+"--->"+c.name()+"("+c.getName()+")");
}
}
}
二.EnumMap 和EnumSet的使用
EnumMap是Map类的子类,所以它的所有方法都是从Map类中继承过来的,使用方法如下
Eg:
package cn.test.java.enums;
import java.util.EnumMap;
import java.util.Map; public class EunmMapDemo { public static void main(String[] args) {
Map<Color,String> desc = null;
desc = new EnumMap<Color,String>(Color.class);
desc.put(Color.blus,"蓝色");
desc.put(Color.green,"绿色");
desc.put(Color.red,"红色");
System.out.println("===输出全部内容");
for(Color c : Color.values()){
System.out.println(c.name()+"--->"+desc.get(c));
}
System.out.println("===输出全部键");
for(Color c: desc.keySet()){
System.out.println(c.name()+"、");
}
System.out.println();
System.out.println("=== 输出全部值");
for(String s:desc.values()){
System.out.println(s+"、");
}
}
}
EnumSet类是Set类中的子类,它使用方法中都是以静态形式继续该类方法
Eg:
package cn.test.java.enums;
import java.util.EnumSet;
public class EunmSetDemo {
public static void main(String args[]){
EnumSet<Color> es = null ; // 声明一个EnumSet对象
System.out.println("===EnumSet.allOf(Color.class) =====") ;
es = EnumSet.allOf(Color.class) ; // 将枚举的全部类型设置到EnumSet对象之中
print(es) ;
}
public static void print(EnumSet<Color> temp){ // 专门的输出操作
for(Color c:temp){ // 循环输出EnumSet中的内容
System.out.print(c + "、") ;
}
System.out.println() ;
}
};
三.枚举类的其他使用
1.枚举类型可以跟普通类一样实现接口,从但是实现接口的时候 要求枚举中的每个对象都必须单独覆写接口中的抽象方法。
Eg:
package cn.test.java.enums;
interface Print{
public String getColor();
}
enum Colors implements Print{
RED{
public String getColor(){
return "红色";
}
},
GREEN{
public String getColor(){
return "绿色";
}
},
BLUS{
public String getColor(){
return "蓝色";
}
};
}
public class InterfaceEunmDemo { public static void main(String[] args) {
for(Colors c:Colors.values()){
System.out.println(c.getColor()+"、");
}
}
}
2.枚举类中定义了抽象方法,但是要求枚举中的每个对象都分别实现此抽象方法。
Eg:
package cn.test.java.enums;
enum ColorDemo2 implements Print{
RED{
public String getColor(){
return "红色";
}
},
GREEN{
public String getColor(){
return "绿色";
}
},
BLUS{
public String getColor(){
return "蓝色";
}
};
}
public class AbstractMethodEunm { public static void main(String[] args) {
for(ColorDemo2 c: ColorDemo2.values()){
System.out.println(c.getColor()+"、");
}
}
}
中秋佳节--理解Enum枚举的更多相关文章
- 深入理解Java枚举类型(enum)
https://blog.csdn.net/javazejian/article/details/71333103 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(en ...
- 1.0 基础、标示符、常量、数据类型(enum 枚举,struct 结构体)、操作符、循环、数组
一.程序 现实生活中,程序是指完成某些事务的一种既定方法和过程,可以把程序看成是一系列动作执行过程的描述. 在计算机世界,程序是指令,即为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集 ...
- JDK源码学习笔记——Enum枚举使用及原理
一.为什么使用枚举 什么时候应该使用枚举呢?每当需要一组固定的常量的时候,如一周的天数.一年四季等.或者是在我们编译前就知道其包含的所有值的集合. 利用 public final static 完全可 ...
- Enum 枚举类
目录 Enum 枚举类 基础 定义与用途 基本方法 示例 进阶 实现原理 枚举与Class对象 自定义枚举类和构造方法及toString() Enum中使用抽象方法来实现枚举实例的多态性 Enum与接 ...
- 深入理解Java枚举
深入理解Java枚举 重新认识Java枚举 老实说,挺羞愧的,这么久了,一直不知道Java枚举的本质是啥,虽然也在用,但是真不知道它的底层是个啥样的 直到2020年4月28日的晚上20点左右,我才真的 ...
- 如何理解java枚举,看例子
先来看一下不用枚举怎么表示常量: //常量类 class Num { public static String ONE = "ONE"; public static String ...
- c# (ENUM)枚举组合类型的谷歌序列化Protobuf
c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ...
- C#将Enum枚举映射到文本字符串
介绍 当将以前的C代码移植到C#中时,我快发疯了,因为有很多的数组需要将常量映射到字符串.当我在寻找一个C#的方法来完成的时候,我发现了一个自定义属性和映射的方法. 如何使用代码? 对每一个enum枚 ...
- MVC3不能正确识别JSON中的Enum枚举值
一.背景 在MVC3项目里,如果Action的参数中有Enum枚举作为对象属性的话,使用POST方法提交过来的JSON数据中的枚举值却无法正确被识别对应的枚举值. 二.Demo演示 为了说明问题,我使 ...
随机推荐
- Direct3D 11的Device接口和DeviceContext接口
D3D的两个主要的接口: Device,ID3D11Device.创建资源,Shader对象,状态对象,查询对象,等.以及检查硬件功能,调试函数.可以认为是资源的提供者. Device Context ...
- Leetcode 238 Product of Array Except Self 时间O(n)和空间O(1)解法
1. 问题描写叙述 给定一个n个整数的数组(n>1n>1)nums,返回一个数组output,当中的元素outputioutput_i的值为原数组nums中除numsinums_i之外的全 ...
- Spring项目的建立-移植流程(非入门教程)
Creat by Zhou yong in 2016/4/15/19:00 jar包 java 1.7 tomcat的两个jar包 2个文件上传的jar包 json支持的jar包 hibernate- ...
- [Python笔记][第四章Python正则表达式]
2016/1/28学习内容 第四章 Python字符串与正则表达式之正则表达式 正则表达式是字符串处理的有力工具和技术,正则表达式使用预定义的特定模式去匹配一类具有共同特征的字符串,主要用于字符串处理 ...
- spring aop获取目标对象的方法对象(包括方法上的注解)
这两天在学习权限控制模块.以前看过传智播客黎活明老师的巴巴运动网视频教程,里面就讲到权限控制的解决方案,当时也只是看看视频,没有动手实践,虽说看过几遍,可是对于系统中的权限控制还是很迷茫,所以借着这次 ...
- iOS textfield限制长度,中文占2字符,英文占1字符
之前遇到一种情况,限制textfield长度,并且要适配多语言,做到,例如中文占2字符,英文占1字符,还有考虑其他语言,网上找了很多方法,不太合适,最后结合网上的方案,修改出了还比较适用. 首先,增加 ...
- Oracle CASE WHEN 用法介绍[Z]
Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...
- 从C到C++的升级
C++的语言类型 C++是静态的强类型语言. 静态语言:数据类型在编译期间检查,因此在写程序时需要声明变量的类型 强类型语言:强调数据类型,不同的数据类型间的转换需要进行强制类型转换 C与C++的关系 ...
- POJ2533:Longest Ordered Subsequence(LIS)
Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence ...
- 论docker中 CMD 与 ENTRYPOINT 的区别
Dockerfile里有 CMD 与 ENTRYPOINT 两个功能咋看起来很相似的指令,开始的时候觉得两个互用没什么所谓,但其实并非如此: CMD指令: The main purpose of a ...