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 = 男
}
}
注意:
- 枚举类对象的成员变量不能更改,请使用private final来修饰
- 由枚举类的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 = 女
=============================================================================================
如有不妥之处,欢迎大家给予批评指出,如果对您有帮助,给留下个小赞赞哦
==============================================================================================