您的位置:首页 > 编程语言 > Java开发

java enum(枚举)理解

2017-02-07 11:18 453 查看
下面我在使用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) {

4000
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是单一继承)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: