Java中枚举知识点总结

栏目: Java · 发布时间: 5年前

内容简介:一直对枚举的知识点和应用场景都不是特别明确,特意花点时间对该知识点进行总结。有不对之处,欢迎指出;枚举是JDK1.5出的新特性。它是一种特殊数据类型,能够为一个变量定义一组预定义的常量。变量必须等于为其预定义的值之一。同时在JDK1.6中switch也支持枚举进行逻辑判断。枚举通过enum关键字进行定义。默认都是java.lang.Enum(Enum属于抽象类)的子类。同时枚举类型的每个值都会映射到Enum抽象类中的构造方法。源码如下:

一直对枚举的知识点和应用场景都不是特别明确,特意花点时间对该知识点进行总结。有不对之处,欢迎指出;

枚举是JDK1.5出的新特性。它是一种特殊数据类型,能够为一个变量定义一组预定义的常量。变量必须等于为其预定义的值之一。同时在JDK1.6中switch也支持枚举进行逻辑判断。

枚举通过enum关键字进行定义。默认都是java.lang.Enum(Enum属于抽象类)的子类。同时枚举类型的每个值都会映射到Enum抽象类中的构造方法。源码如下:

public abstract class Enum<E extends Enum<E>>
        implements Comparable<E>, Serializable {
    //Enum.java:117-120行
    protected Enum(String name, int ordinal) {
        this.name = name;
        this.ordinal = ordinal;
    }
}
复制代码

1、简单版,代码如下:

/**
* TestEnum.java
* TestEnum 声明枚举
* RED,GREEN,BLUE 预定义的常量
**/
public enum TestEnum {
    RED,GREEN,BLUE;
}
//TestMain.java
class TestMain {
    public static void main(String[] args){
        for(TestEnum test : TestEnum.values()){
            System.out.println(test);
        }  
    }
}
//执行结果
RED
GREEN
BLUD
复制代码

以上代码其实执行了3次Enum抽象类的构造方法。可以打断点调试下

//类似执行了3次
/**
*第一个参数为值的名称
*第二个参数为值的序号
**/
new Enum<TestEnum>("RED",0);
new Enum<TestEnum>("GREEN",1);
new Enum<TestEnum>("BLUE",2);
复制代码

2、以上代码我都不知道RED、GREEN、BLUE是干啥的。枚举可以实现类似key:val结构的形式吗?可以的,Java允许我们在枚举类中添加任意方法,通过该机制,我们就可以添加所谓的描述了。代码如下:

/**
* TestEnum.java
* TestEnum 声明枚举
* RED,GREEN,BLUE 预定义的常量
**/
public enum TestEnum {
    RED("red","红色"),GREEN("green","绿色"),BLUE("blue","蓝色");
    private String code;
    private String desc;
    
    TestEnum(String code,String desc){
        this.code=code;
        this.desc=desc;
    }
    public String getCode(){
        return code;
    }
    public void setCode(String code){
        this.code=code;
    }
    
    public String getDesc(){
        return desc;
    }
    public void setDesc(String desc){
        this.desc=desc;
    }
    public static HashMap toMap(){ //枚举转成Map(前端的JSON)
        HashMap map=new HashMap();
        for(TestEnum test:TestEnum.values()){
            map.put(test.getCode(),test.getDesc());
        }
        return map;
    }
}
//TestMain.java
class TestMain {
    public static void main(String[] args){
        for(TestEnum test : TestEnum.values()){
            System.out.println(test.getDesc());
        }  
    }
}
//执行结果
红色
绿色
蓝色
复制代码

以上方式可以用来做HTTP请求响应返回JSON数据格式;

3、带抽象方法的枚举类;例如:按不同班级不同学生,分配不同老师数。A、B、C这3个班。A班学生达到30人,分配2个老师;B班学生达到40人,分配3个老师;C班学生达到50人,分配4个老师;代码实现如下:

//枚举文件TeacherNumEnum.java
public enum TeacherNumEnum{
    A("30人") {
      public int distribute(){
        return 2;
      }
    };
    B("40人") {
      public int distribute(){
        return 3;
      }
        
    };
    C("50人") {
      public int distribute(){
        return 4;
      }
    };
    private String desc; //人数描述
    TaskTypeEnum(String desc){
        this.desc=desc;
    }
    public String getDesc(){
        return desc;
    }
    public abstract int distribute();
}
//TestMain.java
class TestMain {
    public static void main(String[] args){
        for(TeacherNumEnum task : TeacherNumEnum.values()){
            System.out.println(task.getDesc()+";分配老师人数:"+task.distribute());
        }
    }
}
//执行结果
30人;分配老师人数:2
40人;分配老师人数:3
50人;分配老师人数:4
复制代码

4、枚举类不存在继承关系,但是可以实现接口。使用extends实现在idea编辑器就会有报错提示。在枚举类中实现接口,是对枚举类的一种约束。可以自行码下;

Enum枚举类方法总结(TeacherNumEnum为例):

在这分为Enum类方法和枚举类值方法

//Enum类方法总结:
TeacherNumEnum.values()://Enum[]://返回Enum数组,所以for可以循环
TeacherNumEnum.valueof("枚举值"); //Enum:返回相应的枚举值
//Enum类值方法总结:
for(TeacherNumEnum task : TeacherNumEnum.values()){
    task.ordinal(); //int:返回枚举值相应的序号
    task.name(); //String:返回枚举值名称
    task.toString(); //String:返回枚举值名称字符串
    task.compareTo(E o); //int:返回此枚举与指定对象的顺序
    task.equals(E o); //boolean:返回此枚举与指定对象是否匹配
}
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

新内容创业:我这样打造爆款IP

新内容创业:我这样打造爆款IP

南立新、曲琳 / 机械工业出版社 / 2016-5-10 / 39.00

这是个内容创业爆棚的时代,在采访几十家内容创业公司,与一线最优秀的创业者独家对话之后,作者写作了这本书,其中包括对这个行业的真诚感触,以及希望沉淀下来的体系化思考。 本书共分三个部分讲述了爆红大号的内容创业模式和方法。其中第一部分,讲述了新的生产方式,即内容形态发展的现状--正在被塑造;第二部分,讲述了新的盈利探索,即从贩卖产品到贩卖内容的转变,该部分以多个案例进行佐证,内容翔实;第三部分,......一起来看看 《新内容创业:我这样打造爆款IP》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具