56--枚举类型

JDK1.5之前需要自定义枚举类

实例:

package com.qwy.enumtest;

/**
 * 自定义枚举类型
 * @author qwy
 * @create 2021-03-20 14:56
 **/
class Gender {
    
    
    //声明Gender对象的属性private  final 修饰
    private final String name;
    private final String value;
    //私有化类的构造器,并给对象属性赋值
    private Gender(String name,String value){
    
    
        this.name=name;
        this.value=value;
    }
    //提供当前枚举类的多个对象:public static final的
    public static final Gender WOMAN=new Gender("woman","女");
    public static final Gender MAN=new Gender("woman","男");
    public static final Gender UNKNOWN=new Gender("woman","未知");

    public String getName() {
    
    
        return name;
    }

    public String getValue() {
    
    
        return value;
    }

    @Override
    public String toString() {
    
    
        return "Gender{" +
                "name='" + name + '\'' +
                ", value='" + value + '\'' +
                '}';
    }
}

public class TestGender{
    
    
    public static void main(String[] args) {
    
    
        Gender gender=Gender.WOMAN;
        System.out.println("gender = " + gender);//gender = Gender{name='woman', value='女'}
    }
}

1.私有化类的构造器
2.在类的内部创建枚举类的实例。声明为:public static final
3.对象如果有成员变量,应该声明为private final,并在构造器中初始化

JDK 1.5 新增的 enum 关键字用于定义枚举类

实例:

package com.qwy.enumtest;

/**
 * @author qwy
 * @create 2021-03-20 15:57
 **/
enum GenderEnum{
    
    
    //提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
    WOMAN("woman","女"), MAN("man","男"), UNKNOWN("unknown","未知");
    //定义私有属性
    private final String name;
    private final String value;
    //私有化类的构造器,并给对象属性赋值
    private GenderEnum(String name, String value) {
    
    
        this.name=name;
        this.value=value;
    }

    public String getName() {
    
    
        return name;
    }

    public String getValue() {
    
    
        return value;
    }
    
}
public class TestEnum {
    
    
    public static void main(String[] args) {
    
    
        GenderEnum man = GenderEnum.MAN;
        System.out.println("man = " + man);//man = MAN
        String name = GenderEnum.MAN.getName();
        System.out.println("name = " + name);//name = woman
        String value = GenderEnum.MAN.getValue();
        System.out.println("value = " + value);//value = 男
    }
}

注意:

  1. 枚举类对象的成员变量不能更改,请使用private final来修饰
  2. 由枚举类的private final修改的成员变量应该在构造函数中赋值
    3.如果枚举类显式定义带有参数的构造函数,则在枚举值时,它还必须列出相应的传入参数

实现接口的枚举类

可以使用枚举类中对象匿名实现接口中的抽象方法:

package com.qwy.enumtest;

import java.lang.management.ManagementFactory;

/**
 * @author qwy
 * @create 2021-03-22 16:06
 **/
//定义接口
interface Info{
    
    

        void show();
}
enum GenderEnum2 implements Info{
    
    
    WOMAN("woman","女"){
    
    
        //实现接口中的抽象方法show()
        @Override
        public void show() {
    
    
            System.out.println("gender:"+MAN.gender+",value:"+ MAN.value);
        }
    },MAN("man","男"){
    
    
        @Override
        public void show() {
    
    
            System.out.println("gender:"+MAN.gender+",value:"+ MAN.value);
        }
    },UNKNOWN("unknown","未知"){
    
    
        @Override
        public void show() {
    
    
            System.out.println("gender:"+MAN.gender+",value:"+ MAN.value);
        }
    };
    private final String gender;
    private final String value;
    private GenderEnum2(String gender,String value){
    
    
        this.gender=gender;
        this.value=value;
    }
}
public class TestEnumInfo {
    
    
    public static void main(String[] args) {
    
    
        //调用枚举类中实现接口的show方法
        GenderEnum2.MAN.show();//gender:man,value:男
    }
}

运行结果:
gender:man,value:男
1与普通Java类一样,枚举类可以实现一个或多个接口
2如果每个枚举值在调用实现的接口方法中呈现相同的行为,那么应该统一实现该方法。
3.如果希望每个枚举值在调用实现的接口方法时表现不同,可以让每个枚举值分别实现该方法

Enum类的主要方法

1.values()方法:返回枚举类型的对象数组。此方法使遍历所有枚举值变得容易。
2.valueOf(String STR):可以将字符串转换为相应的枚举类对象。要求字符串是枚举类对象的“名称”。如果不是,则存在运行时异常:IllegalArgumentException。
3.toString():返回当前枚举类的常量的名称

package com.qwy.enumtest;

import java.lang.management.ManagementFactory;

/**
 * @author qwy
 * @create 2021-03-22 16:06
 **/
//定义接口
interface Info{
    
    

        void show();
}
enum GenderEnum2 implements Info{
    
    
    WOMAN("woman","女"){
    
    
        //实现接口中的抽象方法show()
        @Override
        public void show() {
    
    
            System.out.println("gender:"+MAN.gender+",value:"+ MAN.value);
        }
    },MAN("man","男"){
    
    
        @Override
        public void show() {
    
    
            System.out.println("gender:"+MAN.gender+",value:"+ MAN.value);
        }
    },UNKNOWN("unknown","未知"){
    
    
        @Override
        public void show() {
    
    
            System.out.println("gender:"+MAN.gender+",value:"+ MAN.value);
        }
    };
    private final String gender;
    private final String value;
    private GenderEnum2(String gender,String value){
    
    
        this.gender=gender;
        this.value=value;
    }
}
public class TestEnumInfo {
    
    
    public static void main(String[] args) {
    
    
        //返回所有的枚举中对象
        Gender[] values = Gender.values();
        for (int i = 0; i < values.length; i++) {
    
    
            System.out.println(values[i]);
        }
    }
}

运行结果:
MAN
WOMAN
UNKNOWN

实例:

package com.qwy.enumtest;

import java.lang.management.ManagementFactory;

/**
 * @author qwy
 * @create 2021-03-22 16:06
 **/
//定义接口
interface Info{
    
    

        void show();
}
enum GenderEnum2 implements Info{
    
    
    WOMAN("woman","女"){
    
    
        //实现接口中的抽象方法show()
        @Override
        public void show() {
    
    
            System.out.println("gender:"+MAN.gender+",value:"+ MAN.value);
        }
    },MAN("man","男"){
    
    
        @Override
        public void show() {
    
    
            System.out.println("gender:"+MAN.gender+",value:"+ MAN.value);
        }
    },UNKNOWN("unknown","未知"){
    
    
        @Override
        public void show() {
    
    
            System.out.println("gender:"+MAN.gender+",value:"+ MAN.value);
        }
    };
    private final String gender;
    private final String value;
    private GenderEnum2(String gender,String value){
    
    
        this.gender=gender;
        this.value=value;
    }
}
public class TestEnumInfo {
    
    
    public static void main(String[] args) {
    
    
        //返回枚举类中对应枚举的对应gender的值
        System.out.println(Gender.valueOf("MAN").getGender());//男
        System.out.println(Gender.valueOf("WOMAN").getGender());//女
        System.out.println(Gender.valueOf("UNKNOWN").getGender());//未知
    }
}

枚举类型在switch结构中使用

在JDK1.5中,可以将枚举定义的枚举类的对象用作switch表达式中的表达式,case子句可以直接使用枚举值的名称,而无需添加枚举类作为限定条件。
实例:

package com.qwy.enumtest;

/**
 * @author qwy
 * @create 2021-03-22 16:30
 **/
enum Gender{
    
    
    MAN("男"),WOMAN("女"),UNKNOWN("未知");
    private final String gender;
    private Gender(String gender){
    
    
        this.gender=gender;
    }
    public String getGender(){
    
    
        return this.gender;
    }
}
public class TestSwitch {
    
    
    public static void main(String[] args) {
    
    
        System.out.println("请输入新生儿性别:");
        switch (Gender.WOMAN){
    
    
            case MAN:
                System.out.println("gender = " + Gender.MAN.getGender());
                break;
            case WOMAN:
                System.out.println("gender = " + Gender.WOMAN.getGender());
                break;
            case UNKNOWN:
                System.out.println("gender = " + Gender.UNKNOWN.getGender());
                break;
        }
    }
}

运行结果:
请输入新生儿性别:
gender = 女

=============================================================================================
如有不妥之处,欢迎大家给予批评指出,如果对您有帮助,给留下个小赞赞哦
==============================================================================================

猜你喜欢

转载自blog.csdn.net/qwy715229258163/article/details/115086974