枚举类

枚举类的引入

问题:
一些方法在运行时,它需要的数据类型不能是任意的,而必须是一定范围内的值
解决方案:
自定义一个类,限制别人随意创建对象

  • 代码如下:

/*
 * 问题:
 *      一些方法在运行时,它需要的数据类型不能是任意的,而必须是一定范围内的值
 * 解决方案:
 *      自定义一个类,限制别人随意创建对象
 * 代码如下:
 */


/*
 自定义一个性别类,限制着别人任意创建该类的对象
 */

class Gender{
    String value;   //存储性别
    
    //对外提供本类的对象
    public static final Gender man = new Gender("男");
    
    public static final Gender woman = new Gender("女");
    
    //私有化Gender类,使外部不能直接创建该类对象
    private Gender(String value){
        this.value = value;
    }
}

class Person{
    String name;
    Gender sex;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Gender getSex() {
        return sex;
    }
    public void setSex(Gender sex){
        this.sex = sex;
    }
    
    @Override
    public String toString() {
        return "姓名:"+this.name +",性别:"+this.sex.value;
    }
    
    
}

public class Demo3 {

    public static void main(String[] args) {
        Person p = new Person();
        p.name = "狗娃";
        p.setSex(Gender.man);
        System.out.println(p);
    }
}

枚举

  • 枚举类的应用场景:

一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,这时我们就可以是使用枚举类型进行限制

  • 例如:

一年四季、方向、性别

  • 格式:
    enum 类名{
    
    }
  • 注意的事项:
    1. 枚举类也是类,只不过是一个特殊的类
    2. 枚举值默认的修饰符是:public static final
    3. 枚举值其实就是当前枚举类的类型
    4. 枚举值必须是枚举类中的第一个语句
    5. 枚举类的构造方法默认是private,修饰符也 必须是private
    6. 枚举类允许出现抽象的方法,但是一旦出现了抽象的方法,那么枚举值就必须实现抽象的方法
  • 例如:
//定义一个方向
enum Direction{
    UP("上"),DOWN("下"),LEFT("左"),RIGHT("右");     //枚举值
    String value;           //定义一个成员变量
    public void print(){    //定义一个方法
        System.out.println("value:"+value);
    }
    private Direction(String value){
        this.value = value;
    }
}
public class Enum {
    public static void main(String[] args) {
        Direction.UP.print();
    }
}

使用枚举类解决最开始的问题:

//性别的枚举类
enum Gender1{
    
    MAN("男"),WOMAN("女");    
    
    String value;
    
    private Gender1(String value){
        this.value = value;
    }
}
class Person1{
    String name;
    private Gender1 sex;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Gender1 getSex() {
        return sex;
    }
    public void setSex(Gender1 sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "姓名:"+this.name+",性别:"+this.sex.value;
    }
    
}
public class Demo4 {
    public static void main(String[] args) {
        Person1 p = new Person1();
        p.name = "张三";
        p.setSex(Gender1.MAN);
        System.out.println(p);
    }
}

你可能感兴趣的:(枚举类)