文章目录

  • 前言
  • 一、枚举类型定义
  • 二、访问成员
  • 三、遍历
  • 四、在switch()中使用枚举
  • 五、方法
  • 1.内置方法
  • 1.1 ordinal()用于返回成员的索引
  • 1.2 compareTo()用于比较枚举类型中两个成员的索引值
  • 1.3 valueOf()用于返回枚举类型中指定字符串对应的枚举成员,如果不存在则抛出异常
  • 1.4 values()方法以数组方式返回枚举类型中的成员
  • 2.构造方法
  • 3.自定义方法
  • 4.重写方法
  • 总结

前言

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

一、枚举类型定义

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

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

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

二、访问成员

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

System.out.println(famulei.ZHANGSAN);

输出结果:

java enum 指定int枚举值 java枚举类型enum用法_后端


也可以通过使用valus(),使用索引进行访问:

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

输出结果:

java enum 指定int枚举值 java枚举类型enum用法_枚举类型_02

三、遍历

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

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

输出结果:

java enum 指定int枚举值 java枚举类型enum用法_java_03

四、在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());
    }
}

输出结果:

java enum 指定int枚举值 java枚举类型enum用法_后端_04

五、方法

1.内置方法

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

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

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

输出结果:

java enum 指定int枚举值 java枚举类型enum用法_java_05

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

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

输出结果:

java enum 指定int枚举值 java枚举类型enum用法_System_06

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

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

输出结果:

java enum 指定int枚举值 java枚举类型enum用法_System_07


但是,如果枚举类型中不存在指定的字符串对应的成员,会抛出IllegalArgumentException异常:

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

java enum 指定int枚举值 java枚举类型enum用法_枚举类型_08

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

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

输出结果:

java enum 指定int枚举值 java枚举类型enum用法_System_09


该方法返回了数组的地址,可以使用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);
    }
}

输出结果:

java enum 指定int枚举值 java枚举类型enum用法_System_10

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);
    }
}

输出结果:

java enum 指定int枚举值 java枚举类型enum用法_枚举类型_11

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 enum 指定int枚举值 java枚举类型enum用法_java enum 指定int枚举值_12

总结

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