Java面向对象编程高级-枚举类(四)

在这里插入图片描述


一、概述

枚举类型本质上也是一种类,只不过是这个类的对象是有限的、固定的几个,不能让用户随意创建。
枚举类的例子举不胜举:

星期: Monday(星期-)…Sunday(星期天)
性别:Man(男)、Woman(女)
月份:January(1月)…December(12月)
季节:Spring(春节)…Winter(冬天)
三原色:red(红色)、green(绿色)、blue(蓝色)
支付方式:Cash(现金)、WechatPay(微信)、Alipay(支付宝)、BankCard(银行卡)
就职状态:Busy(忙碌)、Free(空闲)、Vocation(休假)、Dimission(离职)
线程状态:创建、就绪、运行、阻塞、死亡

2、开发中的建议
开发中如果针对于某个类,其实例是确定个数的,则推荐将此类声明为枚举类。
如果枚举类中的实例只有1个,可以看作是单例的实现方式。

二、JDK5.0和JDK5.0之前如何定义枚举类

1、JDK5.0之前代码演示

package com._enum;

public class SeasonTest {
    
    
    public static void main(String[] args) {
    
    
        System.out.println(Season.SUMMER);
    }
}


class Season {
    
    
    //2、声明实例变量  使用private final 修饰
    private final String Name;
    private final String Desc;

    //1、私有化类的构造器
    private Season(String Name, String Desc) {
    
    
        this.Name = Name;
        this.Desc = Desc;
    }

    //3、提供实例变量的get方法

    public String getName() {
    
    
        return Name;
    }

    public String getDesc() {
    
    
        return Desc;
    }

    //创建实例对象  使用public static final  修饰
    public static final Season SPRING = new Season("春天", "春暖花开");
    public static final Season SUMMER = new Season("夏天", "夏日炎炎");
    public static final Season AUTOMN = new Season("秋天", "硕果累累");
    public static final Season WINTER = new Season("冬天", "白雪皑皑");

    @Override
    public String toString() {
    
    
        return "Season{" +
                "Name='" + Name + '\'' +
                ", Desc='" + Desc + '\'' +
                '}';
    }
}

2、JDK5.0代码演示(常用)

Enum中常用方法
使用enum关键字定义的枚举类,默认其父类是java.lang.Enum类
使用enum关键字定义的枚举类,不要再显示的定义其父类,否则会报错。

String tostring():默认返回的是常量名(对象名),可以继续手动重写该方法
static 枚举类型[] values():返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值,是一个静态方法
static 枚举类型 valueOf(string name):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象
String name():得到当前枚举常量的名称。建议优先使用tostring()。
int ordinal():返回当前枚举常量的次序号,默认从0开始

package com._enum;

public class SeasonTest1 {
    
    
    public static void main(String[] args) {
    
    
        System.out.println(Searon1.SPRING.getName());

        System.out.println(Searon1.SPRING);

        System.out.println(Searon1.SPRING.name());

        Searon1[] values = Searon1.values();
        for (int i = 0; i < values.length; i++) {
    
    
            System.out.println(values[i]);
        }


        //4、.valueOf(objName);返回当前枚举类中名称为objName的枚举类对象
        //如果枚举类中不存在ibjName则报错
        String objName = "WINTER";
        Searon1 searon1 = Searon1.valueOf(objName);
        System.out.println(searon1);


    }
}


//jdk5.0 使用enum关键字定义枚举类
enum Searon1 {
    
    
    //1、必须在枚举类的开始声明多个对象,对象之间使用,隔开
    SPRING("春天", "春暖花开"),
    SUMMER("夏天", "夏日炎炎"),
    AUTOMN("秋天", "硕果累累"),
    WINTER("冬天", "白雪皑皑");


    //2、声明实例变量  使用private final 修饰
    private final String Name;
    private final String Desc;

    //3、私有化类的构造器
    private Searon1(String Name, String Desc) {
    
    
        this.Name = Name;
        this.Desc = Desc;
    }

    //3、提供实例变量的get方法

    public String getName() {
    
    
        return Name;
    }

    public String getDesc() {
    
    
        return Desc;
    }


    @Override
    public String toString() {
    
    
        return "Searon1{" +
                "Name='" + Name + '\'' +
                ", Desc='" + Desc + '\'' +
                '}';
    }
}

三、练习

案例1

package com._enum.apply;

public class Employee {
    
    
    private String name;
    private int age;
    private Status status;

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }

    public Status getStatus() {
    
    
        return status;
    }

    public void setStatus(Status status) {
    
    
        this.status = status;
    }

    public Employee() {
    
    

    }

    public Employee(String name, int age, Status status) {
    
    
        this.name = name;
        this.age = age;
        this.status = status;
    }

    @Override
    public String toString() {
    
    
        return "Employee{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", status=" + status +
                '}';
    }
}

package com._enum.apply;

public enum Status {
    
    
    BUSY, FREE, VOCATION, DIMISSION;
}

package com._enum.apply;

public class EmployeeTest {
    
    
    public static void main(String[] args) {
    
    
        Employee e1 = new Employee("tom",21,Status.BUSY);
        System.out.println(e1);

    }

}


Employee{
    
    name='tom', age=21, status=BUSY}

案例2:颜色枚举类Color(使用enum声明)
1、声明颜色牧举类:7个常量对象:RED,ORANGE,YELLOW,GREEN,CYAN, BLUE,PURPLE;
2、在测试类中,使用枚举类,获取绿色对象,并打印对象。

public enum Color {
    
    
    REB, ORANGE, YELLOW, GREEN, CYAN, BLUE, PURPLE;
}

案例拓展:颜色枚举类(使用enum声明)

(1)声明颜色枚举类Color:

声明final修饰的int类型的属性red,green,blue
声明final修饰的String类型的属性description
声明有参构造器Color(int red,int green,int blue,String description)
创建7个常量对象:红、橙、黄、绿、青、蓝、紫,
重写tostring方法,例如:RED(255,0,0)->红色

(2)在测试类中,使用枚举类,获取绿色对象,并打印对象、
提示:

7个常量对象的RGB值如下:
红:(255,0,0)
橙:(255,128,0)
黄:(255,255,0)
绿:(日,255,0)
青:(0,255,255)
蓝:(0,0,255)
茶:(128,0 255)

package com._enum;

/**
 * package:com._enum
 *
 * @Author jimmy-yan
 * @Create 2024/11/4 14:05
 */
public class ColorTest {
    
    
    public static void main(String[] args) {
    
    
        System.out.println(Color.GREEN);
    }
}

enum Color {
    
    
    RED(255, 0, 0, "红色"),
    YELLOW(255, 0, 0, "黄色"),
    GREEN(0, 255, 0, "绿色"),
    BLUE(255, 0, 0, "蓝色");


    private final int red;
    private final int green;
    private final int blue;
    private final String desc;

    public int getRed() {
    
    
        return red;
    }

    public int getGreen() {
    
    
        return green;
    }

    public int getBlue() {
    
    
        return blue;
    }

    public String getDesc() {
    
    
        return desc;
    }

    Color(int red, int green, int blue, String desc) {
    
    
        this.red = red;
        this.green = green;
        this.blue = blue;
        this.desc = desc;
    }

    @Override
    public String toString() {
    
    
        return name()+"("+red+","+green+","+blue+")->"+desc;
    }
}

猜你喜欢

转载自blog.csdn.net/YZL40514131/article/details/143481057