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
}
原文地址:https://www.cnblogs.com/spadd/p/4191345.html