小白学JAVA之十——枚举

一. 枚举的定义

  • 使用public static final表示的常量描述较为繁琐,使用enum关键字来定义枚举类型取代常量,枚举类型是从Java5开始增加的一种引用数据类型。
  • 枚举值就是当前类的类型,也就是指向本类的对象,默认使用public static final关键字共同修饰,因此采用枚举类型.的方式调用。
  • 枚举类可以自定义构造方法,但是构造方法的修饰符必须是private,默认也是私有的。

二. 案例分析

编程实现所有方向的枚举,所有的方向:向上、向下、向左、向右。

1.引出枚举

在没有枚举之前,我们会通过自定义一个含有string类型成员变量的类来表示Direction,通过new对象给string赋值“向上”“向下”“向左”“向右”来表示方向。

public static void main(String[] args) {// 1.声明Direction类型的引用指向该类型的对象并打印特征Direction d1 = new Direction("向上");System.out.println("获取到的字符串是:" + d1.getDesc()); // 向上Direction d2 = new Direction("向下");System.out.println("获取到的字符串是:" + d2.getDesc()); // 向下Direction d3 = new Direction("向左");System.out.println("获取到的字符串是:" + d3.getDesc()); // 向左Direction d4 = new Direction("向右");System.out.println("获取到的字符串是:" + d4.getDesc()); // 向右System.out.println("-------------------------------------");Direction d5 = new Direction("向前");System.out.println("获取到的字符串是:" + d5.getDesc()); // 向前}
}

但这样会出现一个问题,即如上代码块中的对象d5所示,明明我们不需要Direction类有向前的方向,却依旧能够成功创建。因此,我们需要用到枚举,只给它限定静态的四个方向对象供程序员使用。

2. 使用方式

1.1 定义Direction类

将需要枚举的对象以静态常量的形式出现。
- 代码如下:

/*** 编程实现所有方向的枚举,所有的方向:向上、向下、向左、向右*/
public class Direction {private final String desc; // 用于描述方向字符串的成员变量// 2.声明本类类型的引用指向本类类型的对象public static final Direction UP = new Direction("向上");public static final Direction DOWN = new Direction("向下");public static final Direction LEFT = new Direction("向左");public static final Direction RIGHT = new Direction("向右");// 通过构造方法实现成员变量的初始化,更加灵活// 1.私有化构造方法,此时该构造方法只能在本类的内部使用private Direction(String desc) {this.desc = desc;}// 通过公有的get方法可以在本类的外部访问该类成员变量的数值public String getDesc() {return desc;}
}

1.2 调用

打印方向信息有两种方法:

  • 调用对象的get方法打印方向字符串
  • 直接根据枚举类型分类打印

两种情况代码如下:

public class DirectionUseTest {// 自定义静态方法实现根据参数指定的字符串内容来打印具体的方向信息public static void test1(String str) {switch (str) {case "向上":System.out.println("抬头望明月!"); break;case "向下":System.out.println("低头思故乡!"); break;case "向左":System.out.println("左牵黄"); break;case "向右":System.out.println("右擎苍"); break;default:System.out.println("没有这样的方向哦!");}}// 自定义静态方法实现根据参数指定的枚举类型来打印具体的方向信息public static void test2(DirectionEnum de) {switch (de) {case UP:System.out.println("抬头望明月!"); break;case DOWN:System.out.println("低头思故乡!"); break;case LEFT:System.out.println("左牵黄"); break;case RIGHT:System.out.println("右擎苍"); break;default:System.out.println("没有这样的方法哦!");}}public static void main(String[] args) {DirectionUseTest.test1(Direction.UP.getDesc());DirectionUseTest.test1("今天是个好日子!");System.out.println("--------------------------------------------");DirectionUseTest.test2(DirectionEnum.DOWN);//DirectionUseTest.test2("今天是个好日子!"); Error:类型不匹配,减少了出错的可能性}
}

三. 枚举类的常用方法

所有的枚举类都继承自java.lang.Enum类,常用方法如下:

public class DirectionEnumTest {public static void main(String[] args) {// 1.获取DirectionEnum类型中所有的枚举对象DirectionEnum[] arr = DirectionEnum.values();// 2.打印每个枚举对象在枚举类型中的名称和索引位置for (int i = 0; i < arr.length; i++) {System.out.println("获取到的枚举对象名称是:" + arr[i].toString());System.out.println("获取到的枚举对象对应的索引位置是:" + arr[i].ordinal()); // 和数组一样下标从0开始}System.out.println("---------------------------------------------------------------");// 3.根据参数指定的字符串得到枚举类型的对象,也就是将字符串转换为对象//DirectionEnum de = DirectionEnum.valueOf("向下"); // 编译ok,运行发生IllegalArgumentException非法参数异常DirectionEnum de = DirectionEnum.valueOf("DOWN");//DirectionEnum de = DirectionEnum.valueOf("UP LEFT"); // 要求字符串名称必须在枚举对象中存在//System.out.println("转换出来的枚举对象名称是:" + de.toString());System.out.println("转换出来的枚举对象名称是:" + de); // 当打印引用变量时,会自动调用toString方法System.out.println("---------------------------------------------------------------");// 4.使用获取到的枚举对象与枚举类中已有的对象比较先后顺序for(int i = 0; i < arr.length; i++) {// 当调用对象在参数对象之后时,获取到的比较结果为 正数// 当调用对象在参数对象相同位置时,则获取到的比较结果为 零// 当调用对象在参数对象之前时,则获取到的比较结果为 负数System.out.println("调用对象与数组中对象比较的先后顺序结果是:" + de.compareTo(arr[i]));}System.out.println("---------------------------------------------------------------");// 5.使用数组中每个DirectionEnum对象都去调用show方法测试for (int i = 0; i < arr.length; i++) {arr[i].show();}}
}

四. 枚举类实现接口的方式

枚举类实现接口后需要重写抽象方法,而重写方法的方式有两种:重写一个,或者每个对象都重写。

小白学JAVA之十——枚举相关推荐

  1. 小白学JAVA之十八——泛型

    小白学JAVA之十八--泛型 一. 基本概念 通常情况下集合中可以存放不同类型的对象,是因为将所有对象都看做Object类型放入的,因此从集合中取出元素时也是Object类型,为了表达该元素真实的数据 ...

  2. 零基础小白学Java难度大不大

    零基础小白学Java难度大不大?有很多人都是非常关心这个问题的,如今java在IT互联网行业的快速发展,引起了很多人的注意,那么,哪些人适合入行Java?零基础学习Java难度大吗?下面,小编就为大家 ...

  3. 小白学Java Web 3 Web前端之CSS基本知识2

    这一篇接着上一篇的内容来分享,上一篇还有大量的样式属性没有列出,不过在继续分享之前,我想先来分享一下关于网页的布局相关的一些东西,因为下一篇我打算分 享用仅仅前面三小篇的内容来制作一个简单的静态网页, ...

  4. java编程好学么_零基础小白学Java编程好学吗

    Java是一门不会衰落的开发语言,伴随着IT行业的兴起,目前学习java培训的人员也是变得更多了,但要想学好java的话通过自学是没有那样非常容易的事情.尤其是对于初学者的学生而言,那么零基础小白学J ...

  5. java零基础多久能学会_小白学java大概需要多久 零基础学起来难么

    这取决于每天学习的时间.如果你每天花2-3个小时学习,大约需要半年时间.更重要的是,这取决于你学了多少.如果你想学一门基础知识,只需要几个月.如果你想深入学习,熟悉它,需要一年.两年甚至三五年的时间. ...

  6. 小白学java进阶工程师路线图

    原标题:小白学java进阶工程师路线图 Java小白如何成长为Java大牛?这9点你做到了几点! 给刚进社会的程序员新生一个建议,想成为一个优秀的程序员,高级程序员,不能眼高手低,不能认为开发新项目, ...

  7. 教妹学Java(二十二):来吧,一文彻底搞懂Java命名约定

    你好呀,我是沉默王二,是<Web 全栈开发进阶之路>的作者,CSDN 博客之星.<教妹学 Java>是一套非常有趣的付费专栏,除了继续保持幽默风趣的行风风格,我还力求把每一个知 ...

  8. 小白学Java 第14课:do while 循环

    [相关链接] 上一篇:小白学Java 第13课:while 循环 下一篇:小白学Java 第15课:方法介绍与调用 总纲:返回列表 上节课我们学习了while循环,他的结构格式为: while(条件) ...

  9. java 包装类可以被继承_小白学Java:包装类

    小白学Java:包装类 学习了许久的Java,我们知道Java是一种面向对象的语言,万物皆对象.但是我们之前在说到Java基本数据类型的时候,由于处理对象需要额外的系统开销,于是出于对性能的考虑,基本 ...

  10. 小白学JAVA之十七——集合类库

    小白学JAVA之十七--集合类库 一. 集合 1.1 集合的由来 当需要在Java程序中记录单个数据内容时,则声明一个变量. 当需要在Java程序中记录多个类型相同的数据内容时,声明一个一维数组. 当 ...

最新文章

  1. R语言可视化学习笔记之ggridges包
  2. WebApi中跨域解决办法
  3. Visual Studio fatal error C1902: 程序数据库管理器不匹配;请检查安装
  4. 语言五子棋无ai程序框图_微软多语言预训练模型T-ULRv2登顶XTREME排行榜
  5. (4.28)for xml path 在合并拆分上的作用演示
  6. linux python2.7安装教程_Linux RedHat下安装Python2.7开发环境
  7. quickpcb添加pcb库_南京阿勒勾电子 quickpcb2005详细步骤教程
  8. leetcode 贪心_leetcode题解(贪心算法)
  9. JavaScript 模块化简述
  10. [转]Delphi的运算符重载
  11. 怎樣制作线段动画_几何画板如何做动画,看完明白了
  12. python tkinter画动态时钟
  13. Android TV使用gsyVideoPlayer快进操作视频会回退
  14. html列表序号为圆点的,HTML_列表标签
  15. USB(六)-HID(报告描述符的结构实现)
  16. 钱多多软件制作第二天
  17. C语言函数一章教学,c语言中函数教学的探讨
  18. setlocale(LC_ALL,) 中的 LC_* 是什么意思,以及 LANGUAGE/LANG 都是些啥?
  19. (短信服务)java SpringBoot 阿里云短信功能实现发送手机验证码
  20. 从搬砖工到亿万富豪,这些年他经历了什么?

热门文章

  1. Android 10 SystemUI 如何隐藏状态栏耳机图标和定位图标
  2. sklearn.datasets.base中Bunch类
  3. python计算方位角_python 计算方位角实例(根据两点的坐标计算)
  4. 1.2 Genetic and Evolutionary Algorithms
  5. Chia命令行P图工具
  6. 不开心就玩消消乐~~~正则表达式(1)
  7. 嵌入式软件开发下的数据积累
  8. 计算机桌面背景设成白色,电脑桌面背景变白色的了怎么处理啊?
  9. POSTGRESQL 设置hugepage 可以让系统使用内存更有效率,防止OOM
  10. R 计算变量之间的相关性