java枚举(enum)使用详解


前言

Java中的枚举是一种特殊的类,用于存放一组常量,比如一年分为四个季节、车分为机动车和非机动车等。


一、枚举类型定义

枚举类型使用关键字enum进行修饰,定义一组常量,定义方式如下:

enum famulei{
        /**
         * famulei:伐木累
         */
        ZHANGSAN,LISI,WANGWU
    }

定义一个名为famulei的枚举类型,其中有三个成员,ZHANGSAN,LISI,WANGWU,枚举成员一般使用大写。

二、访问成员

访问枚举类的成员可以直接通过枚举类名对成员进行访问:

System.out.println(famulei.ZHANGSAN);

输出结果:
在这里插入图片描述
也可以通过使用valus(),使用索引进行访问:

System.out.println(famulei.values()[1]);

输出结果:
在这里插入图片描述

三、遍历

枚举类型的遍历可以使用增强型for循环进行遍历,如下:

for (famulei f : famulei.values()) {
            System.out.println(f);
        }

输出结果:
在这里插入图片描述

四、在switch()中使用枚举

枚举类中的常量可以在switch()中使用,例如:

package learning;
import java.util.Arrays;
import java.util.EnumMap;

/**
 * @ClassName: MyEnum
 * @Description: Enum learning
 * @author: Lxy
 * @date: 2021/9/23 11:53
 */

public class MyEnum {
    enum famulei {
        /**
         * famulei:伐木累
         */
        ZHANGSAN, LISI, WANGWU;
    }
    public famulei NameChangedEvent(){
        famulei fml = famulei.LISI;
        switch (fml){
            case ZHANGSAN:
                fml= famulei.LISI;
                break;
            case LISI:
                fml=famulei.WANGWU;
                break;
            case WANGWU:
                fml=famulei.ZHANGSAN;
                break;
            default:
                System.out.println("Error!");
        }
        return fml;
    }

    public static void main(String[] args) {
        MyEnum myEnum =new MyEnum();
        System.out.println(myEnum.NameChangedEvent());
    }
}

输出结果:
在这里插入图片描述

五、方法

1.内置方法

Java中枚举类型还提供了很多其他的方法,比如ordinal()、compareTo()、valueOf()以及上述提到的values()等。

1.1 ordinal()用于返回成员的索引

//返回成员索引
System.out.println(famulei.LISI.ordinal());

输出结果:
在这里插入图片描述

1.2 compareTo()用于比较枚举类型中两个成员的索引值

//成员索引成员索引
System.out.println(famulei.ZHANGSAN.compareTo(famulei.WANGWU));

输出结果:
在这里插入图片描述

1.3 valueOf()用于返回枚举类型中指定字符串对应的枚举成员,如果不存在则抛出异常

System.out.println("字符串ZHANGSAN对应的枚举成员:"+famulei.valueOf("ZHANGSAN"));

输出结果:
在这里插入图片描述
但是,如果枚举类型中不存在指定的字符串对应的成员,会抛出IllegalArgumentException异常:

System.out.println("字符串XIAOLIU对应的枚举成员:"+famulei.valueOf("XIAOLIU"));

在这里插入图片描述

1.4 values()方法以数组方式返回枚举类型中的成员

System.out.println("无格式化输出:"+famulei.values());
 System.out.println("格式化输出:"+ Arrays.toString(famulei.values()));

输出结果:
在这里插入图片描述
该方法返回了数组的地址,可以使用Arrays.toString()方法进行格式化。

2.构造方法

枚举类型既然是一种特殊的类,那么就有自己的构造方法,使用构造方法可以对枚举类的成员进行属性(也许叫属性不太合适)说明。同时能够实现对成员属性的访问。

package learning;
import java.util.Arrays;
import java.util.EnumMap;

/**
 * @ClassName: MyEnum
 * @Description: Enum learning
 * @author: Lxy
 * @date: 2021/9/23 11:53
 */

public class MyEnum {
    enum famulei {
        /**
         * famulei:伐木累
         */
        ZHANGSAN("male",20), LISI("male",25), WANGWU("female",30);
        private String sex;
        private int age;
        //构造方法
        famulei(String sex, int age) {
            this.sex=sex;
            this.age=age;
        }
    }

    public static void main(String[] args) {
        System.out.println("LISI's age:"+famulei.LISI.age);
        System.out.println("ZHANGSAN's sex:"+famulei.ZHANGSAN.sex);
    }
}

输出结果:
在这里插入图片描述

3.自定义方法

可通过自定义方法修改成员属性,例如:

package learning;
import java.util.Arrays;
import java.util.EnumMap;

/**
 * @ClassName: MyEnum
 * @Description: Enum learning
 * @author: Lxy
 * @date: 2021/9/23 11:53
 */

public class MyEnum {
    enum famulei {
        /**
         * famulei:伐木累
         */
        ZHANGSAN("male",20), LISI("male",25), WANGWU("female",30);
        private String sex;
        private int age;
        //构造方法
        famulei(String sex, int age) {
            this.sex=sex;
            this.age=age;
        }

        //自定义方法
        public void setSex(String sex){
            this.sex=sex;
        }
        public void setAge(int age){
            this.age=age;
        }
    }

    public static void main(String[] args) {
        System.out.println("ZHANGSAN's sex:"+famulei.ZHANGSAN.sex);
        System.out.println("ZHANGSAN's age:"+famulei.ZHANGSAN.age);
        famulei.ZHANGSAN.setSex("female");
        famulei.ZHANGSAN.setAge(35);
        System.out.println("ZHANGSAN's sex:"+famulei.ZHANGSAN.sex);
        System.out.println("ZHANGSAN's age:"+famulei.ZHANGSAN.age);
    }
}

输出结果:
在这里插入图片描述


4.重写方法

上述Arrays.toString()方法输出枚举类型中的成员,可以对其进行重写,输出每一个成员的属性,例如:

package learning;
import java.util.Arrays;
import java.util.EnumMap;

/**
 * @ClassName: MyEnum
 * @Description: Enum learning
 * @author: Lxy
 * @date: 2021/9/23 11:53
 */

public class MyEnum {
    enum famulei {
        /**
         * famulei:伐木累
         */
        ZHANGSAN("male",20), LISI("male",25), WANGWU("female",30);
        private String sex;
        private int age;
        //构造方法
        famulei(String sex, int age) {
            this.sex=sex;
            this.age=age;
        }

        //自定义方法
        public void setSex(String sex){
            this.sex=sex;
        }
        public void setAge(int age){
            this.age=age;
        }
        //重写方法
        @Override
        public String toString(){
            return this.sex+"-"+this.age;
        }

    }

    public static void main(String[] args) {
        System.out.println(Arrays.toString(famulei.values()));
    }
}

输出结果:
在这里插入图片描述

总结

本文主要简单介绍Java中枚举类型的一些简单使用,此外,枚举类型也可用于实现接口等。

  • 40
    点赞
  • 195
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值