Java学习笔记之Enum枚举(1)

  • 前言
    • 最基本的用法
    • 了解Java中的Enum
    • 后记
    • 链接

前言

这是在学习Java过程中对自己遇到并得以解决的问题的一些记录,一方面是记录下来方便自己以后查询,一方面希望能帮到有同样疑惑的初学者!本文章参考了博主山高人为峰的文章和java官方文档(我使用的JavaSE8)并结合了自己的心路历程。

最基本的用法

在认识到Enum同样是一个标准Java类之前我们可以把枚举当成是一个和C语言中枚举一样的数据类型,只需要加上Java中的标识符private即可。举例:

import java.util.*
//enum声明与使用范例1
//声明
public enum Size
{//这里的分号可以省略不写,也可以加上SMALL,MEDIUM.LARGE
}//使用已经定义的枚举创建一个新域
Size size_1 = Size.SAMLL;
Size size_2 = Size.LARGE;
//判断两个域是否相等
if(size_1 == size_2){ }
//打印到控制台,会输出字符串“STRING"
System.out.println(size_1);

到目前为止这跟C中的枚举没有任何区别。

了解Java中的Enum

首先查阅javadoc发现Enum 的声明为:

public abstract class Enum<E extends Enum<E>>;

也就是说首先Enum是一个标准类,它被标记为abstract 这意味着任何Enum不能实例化。也意味着我们自己声明的时候的语法等效于:

public final class Size extends java.lang.Enum;

但是当我继续看Core Java时候发现后面出现了一个很有意思的代码片

public enum Size
{//后面还有别的域和方法时候必须带分号,且实例声明必须放在最前SMALL("S"),MEDIUM("M").LARGE("L");private String abbreviation;private Level(String abbreviation){ this.abbreviation = abbreviation; }public String getAbbreviation(){return abbreviation;}
}

这段代码着实让我感到非常迷惑,我既不知道为什么SMALL后面还能打个括号带个字符串,也不知道后面定义的privateabbreviation和私有构造器有什么用。但是当我写出下列测试代码:

Size size = Size.SMALL;
System.out.println(size.getAbbreviation());

发现控制台输出了S,这就有意思了,这说明构造器的abbreviationSMALL后面括号里的内容是一样的,而且当我准备把构造器的修饰符修改为public时IDE报错,这时候我有点明白了前面的SMALL、MEDIUM、LARGE在java语法中是省略了写法的静态实例!在参考了Java文档和一些讲解之后我发现这里的SMALL应该是:

//这个语句实际上是通不过编译的,因为枚举不能被实例化,这只是用于说明发生了什么
public static final Size SMALL = new Size("S");

当你声明如下域时

Size size = Size.SMALL;

实际上是在把enum类中静态域的引用给了size,这也解释了为什么上面判断两个枚举是否相等时使用 == 运算符,因为只需要判断是否是同一个引用。那么很自然的我们还可以添加更多域和方法:

public enum Size
{//后面还有别的域和方法时候必须带分号,且实例声明必须放在最前SMALL("S",1),MEDIUM("M",2).LARGE("L",3);private String abbreviation;private int index;private Level(String abbreviation,int index){this.abbreviation = abbreviation;this.index = index;}public String getAbbreviation(){return abbreviation;}public int getIndex(){return index;}
}

在有了自定义域之后我们可以重写toString() 语法来提供关于这个枚举的更多信息:

@override
public String toString()
{return String.format("name:%s,index:%d",getAbbreviation(),getIndex());
}

同时Enum类提供了一个**valueOf()**方法用于初始化枚举,用法如下:

//第一个参数是你自己定义的枚举的class,第二个参数是对应的域的名称
Size size = Enum.valueOf(Size.class,"SMALL");
//等效于
Size size = Size.SMALL;

后记

第一次在CSDN写博客,文字比较凌乱,算是记录学习的心路历程!希望能对同样有困惑搜索而来的你有所帮助!

链接

1.参考博主山高我为峰文章
2.JavaSE8官方文档下载地址

Java学习笔记之Enum枚举(1)相关推荐

  1. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  2. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  3. Java学习笔记(原创)

    Java学习笔记(原创) 2011-12-01 16:37:00|  分类: Java|举报|字号 订阅 下载LOFTER客户端 基本知识 一. Java基础 1. java语言的特点: ①简单:没有 ...

  4. Java学习笔记22:并发(2)

    Java学习笔记22:并发(2) 图源:PHP中文网 终止任务 终止线程有一种非常简单的方式:设置一个多线程共享的标记位,子线程用轮询的方式检查这个标记位,如果该标记位显示取消状态,就让子线程退出执行 ...

  5. java学习笔记2(datawhale教程):运算符和表达式、流程控制、数组

    java学习笔记2(datawhale教程):运算符和表达式.流程控制.数组 文章目录 java学习笔记2(datawhale教程):运算符和表达式.流程控制.数组 一.运算符和表达式 1.数学函数与 ...

  6. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  7. 准备写java学习笔记

    准备写java学习笔记 java int 转载于:https://blog.51cto.com/cryingcloud/1975267

  8. Java学习笔记--StringTokenizer的使用

    2019独角兽企业重金招聘Python工程师标准>>> Java Tips: 使用Pattern.split替代String.split String.split方法很常用,用于切割 ...

  9. java学习笔记12--异常处理

    java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...

最新文章

  1. AESNI/XData勒索病毒来袭 目前主要在乌克兰传播 它居然还能使用硬件加速加密过程...
  2. JQUERY学习第二天之制作横纵向导航菜单
  3. SpringCloud 从菜鸟到大牛之五 统一配置中心 Spring Cloud Config
  4. python函数执行顺序_python下for循环接if判断的函数执行顺序
  5. 博图能打开s7200吗_透明胶真的能把车窗打开吗?现场实验给你看,能成功吗?...
  6. Flutter 进阶篇-所有知识点架构
  7. 深度学习与计算机视觉教程(15) | 视觉模型可视化与可解释性(CV通关指南·完结)
  8. 你的选择,决定了你过怎样的生活
  9. 路由器wan口认证断开服务器无响应,路由器WAN口设置已断开(服务器无响应)的解决方法...
  10. 语义版本号(Semantic Versioning)
  11. 54个站在人类智商巅峰的男人!告诉你2400年的物理学史里都有什么……
  12. react中使用AlipayJSBridge 支付宝支付调用接口在H5网页的应用
  13. 基于Echarts数据可视化地图模块(地图下钻+地图迁徙线)
  14. 使用MODIS数据筛选火点
  15. Umi v4 Ant Desgin Pro v6 prisma zod casbin 企业级后台系统玩透视频教程(14 个视频)
  16. 李开复:怎样领导聪明人
  17. 计算机信息系统物理安全防护措施,信息物理系统安全威胁与防护措施
  18. yzh 第七课 RISCV指令集
  19. PS 滤镜小结(备用)
  20. 小白自学笔记——JAVA基础 2.9循环结构

热门文章

  1. 最新华为电脑管家11.11.96多屏协同!
  2. 机器学习算法线上部署方法
  3. 0范数,1范数,欧几里得范数等范数总结
  4. 中国耐火套圈市场趋势报告、技术动态创新及市场预测
  5. java计算机毕业设计拍卖网站源码+程序+lw文档+mysql数据库
  6. 机器学习中三个典型的非线性函数
  7. 别再抱怨复杂的垃圾分类了,全国 53 个沿海城市,可能都要面临这个问题
  8. node爬虫最简单的demo
  9. 打包iOS App并上架到TestFlight测试
  10. PHP父母互助,40|静待花开:我们的第一次正面管教线上父母互助活动