首页 > 代码库 > JDK5.0新特性-枚举

JDK5.0新特性-枚举

枚举

枚举是什么?
它就是一个特殊的java类.

类的定义
class 类名{}
接口的定义
interface 接口名{}
枚举的定义
enum 枚举名{}

示例
public enum Demo1{} 也会生成一个class文件.

我们对其进行反编译.
定义到我们的class文件所在目录下 执行 javap Demo1

得到的结果
public final class Demo1 extends java.lang.Enum<cn.itcast.enumdemo.Demo1> {
static {};
public static Demo1[] values();
public static Demo1 valueOf(java.lang.String);
}

枚举它是一个java类,它继承了java.lang.Enum这个类.



枚举有什么用?

我们在开发中,有些数据必须被限定在某个范围内取值,不可以超出这个范围,那么这时就可以使用枚举.
比我们传统的代码书写简单.

------------------------------------------------------------
枚举的语法
枚举类也是一种特殊形式的Java类。
枚举类中声明的每一个枚举值代表枚举类的一个实例对象。

与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。
若枚举类只有一个枚举值,则可以当作单态设计模式使用。


注意:在枚举中可以声明方法,属性,构造方法.构造方法必须private。

如果枚举中只有枚举值,最后一个枚举值后面可以不写;结束符.
如果有了其它成员,必须在最后一个枚举值加上";".

1.构造方法必须private,可以重载.
2.在枚举中声明属性,声明方法.

---------------------------------------------------
1:枚举默认就是abstract的,不可以实例化。
2:枚举中可以拥有abstract抽像方法。
3:枚举的所有成员,都默认是public static final类型的。且必须要第一行开始声明。必须在,(逗号)分开。
4:所有的枚举,默认都是java.lang.Enum。
5:Enum类不但是所有枚举的公共的基类,还是一个工具类。


enum ------它是用于声明枚举类的.
Enum ------java中的一个类,它代表所有枚举的父类.
Enumeration----相当于Iterator 遍历集合

--------------------------------------
枚举类中可以声明abstract方法.
如果枚举类中存在抽象方法,对于每一个枚举值必须对这些抽象方法进行重写.

-------------------------------------------------------------------------------
枚举的方法.

1.枚举类中自带
values()-----得到枚举类中的所有枚举值
valueOf()------

2.枚举类从java.lang.Enum类继承的.

name方法---得到枚举值的字符串表现形式.
ordinal() ----得到枚举值的序号
valueOf(Class c,String name)将一个字符串转换成指定枚举类型的枚举值

----------------------------------------------------
枚举知识点掌握
1.枚举在什么时候使用,怎样定义枚举.
2.枚举中可以包含什么内容
3.枚举中常用的方法.

 

1

package cn.itcast.enumdemo;public class Demo4 {    // 提高阅读性,提高安全性    public static void main(String[] args) {        Employee e = new Employee("张三", 1000, Role.BOSS);    }}// 声明一个员工类class Employee {    private String name;    private double salary;    // 员工有角色.对于我们的程序,员工的角色有三种 BOSS MANAGER WORKER    public Role role;    public Employee(String name, double salary, Role role) {        super();        this.name = name;        this.salary = salary;        this.role = role;    }}enum Role{    BOSS,MANAGER,WORKER}//上面和下面是相等的// class Role {//// private Role() {// }//// public static final Role BOSS = new Role();// public static final Role MANAGER = new Role();// public static final Role WORKER = new Role();//// }

 

在枚举中可以声明方法,属性,构造方法.构造方法必须private

package cn.itcast.enumdemo;public class Demo5 {    public static void main(String[] args) {        // EnumDemo.A;    }}// 创建一个枚举enum EnumDemo {    // 枚举值.    A {        @Override        public void print() {            // TODO Auto-generated method stub        }    },    B {        @Override        public void print() {            // TODO Auto-generated method stub        }    },    C {        @Override        public void print() {            // TODO Auto-generated method stub        }    };    // 上面的每一个枚举值,代表的是EnumDemo类的一个对象.    // 对于枚举值我们可以直接使用枚举名.枚举值.本质上是因为它是一个static修饰的.    // 声明属性    private int id;    // 构造方法.    EnumDemo() {    }    EnumDemo(String name) {    }    // 声明方法    public void show() {    }    // 可以存在抽象方法.    public abstract void print();}

 

枚举的方法.

package cn.itcast.enumdemo;import java.util.Arrays;import org.junit.Test;public class Demo8 {    // 从父类java.util.Enum继承的方法.    // name方法    @Test    public void demo1() {        String name = EnumDemo1.A.name();        System.out.println(name);    }    @Test    // ordinal()    public void demo2() {        int index = EnumDemo1.A.ordinal();        System.out.println(index);    }    @Test    // valueOf---将一个字符串转换成指定枚举类型的枚举值    public void demo3() {        EnumDemo1 ed = Enum.valueOf(EnumDemo1.class, "A");                System.out.println(ed==EnumDemo1.A);    }        //枚举类中自带两个方法.    @Test    //values()    public void demo4(){        EnumDemo1[] eds=EnumDemo1.values();        System.out.println(Arrays.toString(eds));    }        @Test    //valueOf    public void demo5(){        EnumDemo1 ed=EnumDemo1.valueOf("A");        System.out.println(ed);    }}enum EnumDemo1 {    A, B, C}

 

JDK5.0新特性-枚举