欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java SE新特性之枚举(JDK 1.5)

程序员文章站 2022-06-04 23:11:56
...

JDK 1.5 新特性—枚举

1、枚举是一种高级的多例设计模式

enum Color{
    RED,GREEN,BLUE
}

public class Test {
    public static void main(String[] args) {
        System.out.println(Color.GREEN);
    }
}

2、Enum类
JDK1.5提供了enum关键字,enum不是一种新的结构,它是对一种类型的包装;使用enum关键字定义的枚举类相当于一个Class类,继承了java.lang.Enum

Enum类的常用方法:

构造方法:protected Enum(String name, int ordinal)
取得枚举名字:public final String name()
取得枚举序号:public final int ordinal()

public static void main(String[] args) {
        System.out.println(Color.GREEN.name()+"  "+Color.BLUE.ordinal());
    }

取得所有枚举数据:values()返回一个枚举的对象数组

enum Color{
	RED,GREEN,BLUE
}

public class Test {
    public static void main(String[] args) {
        for(Color temp : Color.values()){
            System.out.println(temp.ordinal() +"号颜色是:"+ temp.name());
        }
    }
}

注意:Enum与enum的区别?
enum是一个关键字;Enum是一个抽象类,使用enum定义的枚举类本质上相当于一个类继承了Enum抽象类

在枚举中定义更多的结构:

enum Color{
    RED("红色"),GREEN("绿色"),BLUE("蓝色");//枚举类中定义多个对象,枚举对象写在第一行
    private String title;
    private Color(String title){//构造方法私有化
        this.title = title;
    }
    @Override
    public String toString(){//覆写toString方法
        return this.title;
    }
}

public class Test {
    public static void main(String[] args) {
        System.out.println(Color.RED);
    }
}

枚举实现接口:

interface IColor{
    public String getColor();
}

enum Color implements IColor{
    RED("红色"),GREEN("绿色"),BLUE("蓝色");
    private String title;
    private Color(String title){//构造方法私有化
        this.title = title;
    }
    @Override
    public String toString(){//覆写toString方法
        return this.title;
    }

    @Override
    public String getColor() {//覆写接口的getColor方法
        return this.title;
    }
}

public class Test {
    public static void main(String[] args) {
        IColor iColor = Color.GREEN;
        System.out.println(iColor.getColor());
    }
}

枚举的应用:只能使用指定的对象

enum Sex{
    MALE("男"),FEMALE("女");
    private String title;
    private Sex(String title){
        this.title = title;
    }
    @Override
    public String toString(){
        return this.title;
    }
}
class Person{
    private String name;
    private int age;
    private Sex sex;

    public Person(String name, int age, Sex sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
}
public class Test{
    public static void main(String[] args) {
        Person per = new Person("张三",18,Sex.MALE);
        System.out.println(per);
    }
}

枚举支持switch判断:

enum Sex{
    MALE,FEMALE
}
public class Test{
    public static void main(String[] args) {
        switch (Sex.MALE){
            case MALE:
                System.out.println("男性");
                break;
            case FEMALE:
                System.out.println("女性");
                break;
        }
    }
}