首页 > 编程 > Java > 正文

java enum(枚举)理解

2019-11-11 03:13:07
字体:
来源:转载
供稿:网友

下面我在使用enum过程中一些经验和总结,主要包括如下内容:

1.原始的接口定义变量

2.语法(定义)

3.遍历 ,swich等常用操作

4.enum对象的常用方法介绍

5.给enum自定义属性和方法

6.enum的原理分析

7.总结

原始的接口定义变量

public interface IConstants{

  String MON=“mon”;

  String TUE="Tue";

  String WED="Wed";

}

语法定义

 创建枚举类型要使用enum关键字,隐含了所创建的类型都是java.lang.Enum类的子类(java.lang.Enum是一个抽象类)。枚举类型符合通用模式(class Enum<E extends Enum<E>>),而E表示枚举类型的名称。

public enum EnumTest{

MON,TUE,WED;

}

这段代码其实调用了3次Enum(String name,String ordinal)

new Enum<EnumTest>("MON",0);

new Enum<EnumTest>("TUE",1);

new Enum<EnumTest>("WED",2);

遍历,swich常用操作

对enum进行遍历和swich的操作示例

import net.sf.json.JSONArray;import net.sf.json.JSONObject;import java.util.Map;/** */   //定义枚举enum tool {    RED("红色", 1);    PRivate  tool(String  color,int num){         this.color=color;         this.num=num;    }    private String color;    private int num;    public String getColor() {        return color;    }    public void setColor(String color) {        this.color = color;    }    public int getNum() {        return num;    }    public void setNum(int num) {        this.num = num;    }}public class ToolController {    public static void main(String[] args) {         for (tool t:tool.values()){             switch (t.getNum()){                 case 1:                     System.out.println("输出红色");                     break;                 case 2:                     System.out.println("输出绿色");                     break;                 case 3:                     System.out.println("输出白色");                     break;                    default:                        System.out.println("输出黄色");             }         }    }}结果是:

输出红色

enum对象常用方法介绍

int compareTo(E o)

   比较此枚举与指定对象的顺序

class<E> getDeclaringClass()

  返回与此枚举常量的枚举类型相对应的class对象

string name()

 返回此枚举常量名称,在其枚举声明中对其进行声明

int ordinal()

 返回枚举常量顺序

enum自定义属性和方法

public class Test {    public enum Color {        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);        // 成员变量        private String name;        private int index;        // 构造方法        private Color(String name, int index) {            this.name = name;            this.index = index;        }        // 覆盖方法        @Override        public String toString() {            return this.index + "_" + this.name;        }    }    public static void main(String[] args) {        System.out.println(Color.RED.toString());    }}

输出结果是 1_红色

原理分析

 enum的语法结构尽管和class的语法不一样,但是经过编译器之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类。该类继承了java.lang.Enum<E> 。EnumTest经过反编译之后可以得到以下内容

public class com.ichezheng.insurance.controller.EnumTest extends java.lang.Enum{   public static final com.ichezheng.insurance.controller MON;public static final com.ichezheng.insurance.controller TUE;public static final com.ichezheng.insurance.controller WED;}

所以,实际上enum就是一个class,只不过java编译器帮我们帮我们做了语法解析与编译而已

总结

可以把enum看成是一个普通的class,它们都可以定义一些属性和方法,不同之处是:enum不能使用extends 关键字继承其它类,因为enum已经继承了java.lang.enum(java是单一继承)


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表