栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

学习 Java 枚举类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习 Java 枚举类

Java 枚举类的使用栗子
    • 枚举
    • 栗子1,基础的枚举使用方式以及方法调用
    • 栗子2,枚举类内部定义参数
    • 栗子3,枚举类内部定义多个参数
    • 栗子4,枚举类内部定义方法
    • 实现原理
  • 参考地址

枚举

枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。

通俗点:枚举类是一种特殊的数据类型,类型是特殊的“类”,是Class哦,一般的Class可以用的处理,他也都可以用。这个类型一般用于替代常量,同时不要忘记他是类,所以他也可以定义参数、构造方法和一般方法,这种情况下,他能做的就多了。

栗子1,基础的枚举使用方式以及方法调用

定义枚举类

public enum WeekEnum {
    MONDAY, 
    TUESDAY, 
    WEDNESDAY, 
    THURSDAY, 
    FRIDAY, 
    SATURDAY, 
    SUNDAY
}

调用:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_enum2);

        System.out.println(WeekEnum.MONDAY);
        System.out.println(WeekEnum.TUESDAY);
        System.out.println(WeekEnum.WEDNESDAY);
        System.out.println(WeekEnum.THURSDAY);
        System.out.println(WeekEnum.FRIDAY);
        System.out.println(WeekEnum.SATURDAY);
        System.out.println(WeekEnum.SUNDAY);

        System.out.println("===================分割线===================");

        System.out.println(WeekEnum.MONDAY.name());
        System.out.println(WeekEnum.MONDAY.toString());
        System.out.println(WeekEnum.MONDAY.getClass());
        System.out.println(WeekEnum.MONDAY.getDeclaringClass());
        System.out.println(WeekEnum.MONDAY.ordinal());
        System.out.println(WeekEnum.MONDAY.hashCode());

        System.out.println("===================分割线===================");

        System.out.println(WeekEnum.MONDAY.ordinal());
        System.out.println(WeekEnum.TUESDAY.ordinal());
        System.out.println(WeekEnum.WEDNESDAY.ordinal());
        System.out.println(WeekEnum.THURSDAY.ordinal());
        System.out.println(WeekEnum.FRIDAY.ordinal());
        System.out.println(WeekEnum.SATURDAY.ordinal());
        System.out.println(WeekEnum.SUNDAY.ordinal());
    }

输出:

 I/System.out: MonDAY
 I/System.out: TUESDAY
 I/System.out: WEDNESDAY
 I/System.out: THURSDAY
 I/System.out: FRIDAY
 I/System.out: SATURDAY
 I/System.out: SUNDAY
 I/System.out: ===================分割线===================
 I/System.out: MonDAY
 I/System.out: MonDAY
 I/System.out: class com.yoshin.tspsdk.enum2.WeekEnum
 I/System.out: class com.yoshin.tspsdk.enum2.WeekEnum
 I/System.out: 0
 I/System.out: 31483091
 I/System.out: ===================分割线===================
 I/System.out: 0
 I/System.out: 1
 I/System.out: 2
 I/System.out: 3
 I/System.out: 4
 I/System.out: 5
 I/System.out: 6

枚举类创建时会被装载序数,从0开始。

栗子2,枚举类内部定义参数

如果不想使用默认的序数,就需要重写一下类,定义一下参数。

定义枚举类

public enum CarCtrlEnum {

    ENGINE(100), AIR(101), HEAT(102);

    private int code;

    CarCtrlEnum(int code) {
        this.code = code;
    }

    public int code(){
        return code;
    }

}

调用

        System.out.println(CarCtrlEnum.ENGINE);
        System.out.println(CarCtrlEnum.AIR);
        System.out.println(CarCtrlEnum.HEAT);

        System.out.println(CarCtrlEnum.ENGINE.ordinal());
        System.out.println(CarCtrlEnum.AIR.ordinal());
        System.out.println(CarCtrlEnum.HEAT.ordinal());

        System.out.println(CarCtrlEnum.ENGINE.code());
        System.out.println(CarCtrlEnum.AIR.code());
        System.out.println(CarCtrlEnum.HEAT.code());

输出:

 I/System.out: ENGINE
 I/System.out: AIR
 I/System.out: HEAT
 
 I/System.out: 0
 I/System.out: 1
 I/System.out: 2
 
 I/System.out: 100
2021-12-07 15:25:40.951 3565-3565/com.yoshin.tspsdk I/System.out: 101
2021-12-07 15:25:40.951 3565-3565/com.yoshin.tspsdk I/System.out: 102
栗子3,枚举类内部定义多个参数

其实定义一个参数还是多个参数,都是和业务挂钩的。实现方式都是一样的。

定义枚举类

public enum CarCtrlEnum {

    ENGINE(100, "适配多种车型"), AIR(101, "电车功能"), 
    HEAT(102, "油车功能"),SEND_TO_CAR(103,"适配多种车型");

    private int code;
    private String carModel;

    CarCtrlEnum(int code, String carModel) {
        this.code = code;
        this.carModel = carModel;
    }

    public int code() {
        return code;
    }

    public String model() {
        return carModel;
    }

}

调用

        System.out.println(CarCtrlEnum.ENGINE.code());
        System.out.println(CarCtrlEnum.AIR.code());
        System.out.println(CarCtrlEnum.HEAT.code());
        System.out.println(CarCtrlEnum.SEND_TO_CAR.code());

        System.out.println(CarCtrlEnum.ENGINE.model());
        System.out.println(CarCtrlEnum.AIR.model());
        System.out.println(CarCtrlEnum.HEAT.model());
        System.out.println(CarCtrlEnum.SEND_TO_CAR.model());

输出

 I/System.out: 100
 I/System.out: 101
 I/System.out: 102
 I/System.out: 103
 
 I/System.out: 适配多种车型
 I/System.out: 电车功能
 I/System.out: 油车功能
 I/System.out: 适配多种车型

如上业务,code表示车控功能,model表示哪种车型的功能。

栗子4,枚举类内部定义方法
public enum CarCtrlEnum {

    ENGINE(100, "适配多种车型") {
        @Override
        public void sendOrder(int code, String carModel) {
            //todo 下发指令
        }
    },
    AIR(101, "电车功能") {
        @Override
        public void sendOrder(int code, String carModel) {
            //todo 下发指令
        }
    },
    HEAT(102, "油车功能") {
        @Override
        public void sendOrder(int code, String carModel) {
            //todo 下发指令
        }
    }, SEND_TO_CAR(103, "适配多种车型") {
        @Override
        public void sendOrder(int code, String carModel) {
            //todo 下发指令
        }
    };

    private int code;
    private String carModel;

    CarCtrlEnum(int code, String carModel) {
        this.code = code;
        this.carModel = carModel;
    }

    public int code() {
        return code;
    }

    public String model() {
        return carModel;
    }

    public abstract void sendOrder(int code, String carModel);

}

如上只是演示方法怎么定义,一般来讲枚举的方法都是可以直接实现的,而不是调用长耗时。

实现原理

其实我们的现在的写法是经过加工的,编译器会帮助我们编译我们写的类,现实一个继承
java.lang.Enum的类。

java枚举类型的实现原理:https://blog.csdn.net/mhmyqn/article/details/48087247

参考地址

深入理解Java枚举类型(enum):https://blog.csdn.net/cauchy6317/article/details/82313088

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644624.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号