java 枚举_Java中枚举知识点总结

dfbaaa453ec75cbddc3c8b6521a0b91a.png

# 基本概念:

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

枚举是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);

}

}

}

```

以上代码其实执行了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:返回此枚举与指定对象是否匹配

}

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值