枚举类创建原理【精】

举报
brucexiaogui 发表于 2021/11/25 22:19:58 2021/11/25
【摘要】 枚举类创建原理【精】 一、前言 枚举类一般应用在需要定义一组常量,该常量在业务中一般用作描述业务的不同状态场景。 二、枚举类定义 1、枚举类的作用 获取个数固定的一组常量中的某个常量。 2、什么情况下使用枚举类 定义一组常量时,且常量个数是固定的,建议使用枚举类获取常量。 3、使用枚举类获取常量的...

枚举类创建原理【精】

一、前言

枚举类一般应用在需要定义一组常量,该常量在业务中一般用作描述业务的不同状态场景。

二、枚举类定义

1、枚举类的作用

获取个数固定的一组常量中的某个常量。

2、什么情况下使用枚举类

定义一组常量时,且常量个数是固定的,建议使用枚举类获取常量。

3、使用枚举类获取常量的优点

* 枚举类的构造器是私有的,因此其他类不能再创建类对象保证了类对象常量个数是固定的。

*类型安全:调用枚举类只能传递一个定义好的对象名称,传入一个没有定义的名称将会报错。

 

三、枚举类创建

枚举类是在java5.0版本添加的功能,之前没有枚举类。

使用两种方式创建枚举类,将第一种自定义枚举类演变为官方提供的enum枚举类,推导出java官方enum枚举类的原理。

  • 自定义枚举类

  
  1. //自定义枚举类
  2. public class EnumTest {
  3. //1、申明 EnumTest 对象的属性
  4. private final String name;
  5. //2、私有化类的构造器
  6. private EnumTest(String name) {
  7. this.name = name;
  8. }
  9. //3、创建枚举类的对象
  10. public static final EnumTest SPRING = new EnumTest("春天");
  11. public static final EnumTest SUMMER = new EnumTest("夏天");
  12. public static final EnumTest AUTUMN = new EnumTest("秋天");
  13. public static final EnumTest WINTER = new EnumTest("冬天");
  14. //4、获取枚举类对象的属性
  15. public String getName() {
  16. return name;
  17. }
  18. //5、提供toString
  19. @Override
  20. public String toString() {
  21. return "EnumTest{" +
  22. "name='" + name + '\'' +
  23. '}';
  24. }
  25. }
  •  enum枚举类

通过观察下面这个通过 enum 创建的 枚举类实例 总结官方提供的枚举类和自定义枚举类区别:

enum 关键字创建枚举类原理:
     * 1.使用enum 枚举类创建对象将重复的代码进行了简化,只保留了对象名称 。简化效果如下。
     * 简化前:public static final EnumTest SPRING = new EnumTest("春天");
     * 简化后:SPRING("春天"),
     *
     * 2.多个对象之间用逗号 分割,最后用 分号结束。
     * SPRING("春天"),
     * SUMMER("夏天"),
     * AUTUMN("秋天"),
     * WINTER("冬天");

     *
     * 3.枚举类默认继承java.lang.Enum,而不是继承Object类。
     *  例如:public enum EnumPass 类 编译后是这样的 public final class EnumPass extends Enum
     *
     * 4. java.lang.Enum默认重写了toString方法,因此在枚举类中可以不写toString方法。自定义的
     * 枚举类继承Objec,所以需要重写toString方法。


  
  1. public enum EnumPass {
  2. /**
  3. * enum 关键字创建枚举类原理:
  4. * 1.使用enum 枚举类创建对象将重复的代码进行了简化,简化效果如下。
  5. * 简化前:public static final EnumTest SPRING = new EnumTest("春天");
  6. * 简化后:SPRING("春天"),
  7. *
  8. * 2.多个对象之间用逗号 分割,最后用 分号结束
  9. *
  10. * 3.枚举类默认继承java.lang.Enum,而不是继承Object类。
  11. * 例如:public enum EnumPass 类 编译后是这样的 public final class EnumPass extends Enum
  12. *
  13. * 4. java.lang.Enum默认重写了toString方法,因此在枚举类中可以不写toString方法。自定义的
  14. * 枚举类继承Objec,所以需要重写toString方法。
  15. */
  16. SPRING("春天"),
  17. SUMMER("夏天"),
  18. AUTUMN("秋天"),
  19. WINTER("冬天");
  20. //2、申明 EnumTest 对象的属性
  21. private final String name;
  22. //3、提供有参构造器
  23. EnumPass(String name) {
  24. this.name = name;
  25. }
  26. //4、获取枚举类对象的属性
  27. public String getName() {
  28. return name;
  29. }
  30. }

四、调用枚举类


  
  1. public class App {
  2. public static void main(String[] args) {
  3. //第一种方式,自定义枚举类
  4. EnumTest spring = EnumTest.SPRING;
  5. System.out.println("自定义枚举类:"+spring);
  6. //第二种方式,enum关键类创建枚举类
  7. EnumPass spring1 = EnumPass.SPRING;
  8. System.out.println("enum创建枚举类:" +spring1.getName());
  9. }
  10. }

测试结果


  
  1. 自定义枚举类:EnumTest{name='春天'}
  2. enum创建枚举类:春天

 

文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。

原文链接:brucelong.blog.csdn.net/article/details/104892003

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。