先来看一下不用枚举怎么表示常量:

//常量类
class Num {
public static String ONE = "ONE";
public static String TWO = "TWO";
public static String THREE = "THREE";
public static String FOUR = "FOUR";
public static String FIVE = "FIVE";
} //测试类
public class Test{
public static void main(String[] args) {
System.out.println(Num.THREE);
}
}

再来看一下用了枚举怎么表示常量:

//常量类(枚举类)
enum Num {
ONE,TWO,THREE,FOUR,FIVE
} //测试类
public class Test{
public static void main(String[] args) {
System.out.println(Num.THREE);
}
}

当然枚举还能用于 switch

//常量类(枚举类)
enum Num {
ONE,TWO,THREE,FOUR,FIVE
} //测试类
public class Test{
public static void main(String[] args) {
Num num = Num.THREE;
switch (num) {
case ONE:
System.out.println(Color.ONE);
break;
case TWO:
System.out.println(Color.TWO);
break;
case THREE:
System.out.println(Color.THREE);
break;
case FIVE:
System.out.println(Color.FIVE);
break;
}
}
}

那么问题来了!

枚举的成员是什么数据类型?  看下面的例子:

//常量类(枚举类)
enum Num {
ONE(1),TWO(2),THREE(3),FOUR(4),FIVE(5);
//构造方法(构造方法放在枚举成员的后面)
Num (int data){}
} //测试类
public class Test{
public static void main(String[] args) {
System.out.println(Num.FOUR);
}
}

通过上面的例子可以看出,枚举侧成员就是一个对象,成员对象的数据,与构造方法相关,每个成员对象的数据结构相同。

这里我们就可以理解Java枚举的一类相同的对象,这些对象内部的数据结构与枚举类的构造方法相关。

接下来进一步验证枚举成员的数据结构是不是与构造方法相关:

//常量类(枚举类)
enum Num {
ONE(1, "one"),TWO(2, "two"),THREE(3, "three"),FOUR(4, "four"),FIVE(5, "five");
//构造方法
Num (int data,String str){}
} //测试类
public class Test{
public static void main(String[] args) {
System.out.println(Num.FOUR);
}
}

通过上面的例子可以看出,枚举成员的数据结构只与构造方法相关。
那怎么取出枚举成员的数据呢?通过观察▲可以看出枚举类中还没有get和set方法。

//常量类(枚举类)
enum Num {
ONE(1, "one"),TWO(2, "two"),THREE(3, "three"),FOUR(4, "four"),FIVE(5, "five");
//构造方法
Num (int data,String str){
this.data=data;
this.str=str;
} //成员变量
int data;
String str; //get方法
int getData(){
return data;
}
String getStr(){
return str;
} } //测试类
public class Test{
public static void main(String[] args) {
System.out.println(Num.FOUR.getData());
System.out.println(Num.FOUR.getStr());
}
}

通过通过添加枚举类的成员变量和get方法之后成功获取了,成员的数据。

这时再来回看java枚举类,就能发现Java枚举类和普通的类没什么不同,只是枚举成员就像数组对象一样存放,枚举成员的数据结构与构造方法相关。

添加set方法之后就能修改它的值了:

//常量类(枚举类)
enum Num {
ONE(1, "one"),TWO(2, "two"),THREE(3, "three"),FOUR(4, "four"),FIVE(5, "five");
//构造方法
Num (int data,String str){
this.data=data;
this.str=str;
} //成员变量
int data;
String str; //get方法
int getData(){
return data;
}
String getStr(){
return str;
}
//set方法
void setData(int data){
this.data = data;
}
void setStr(String str){
this.str = str;
} } //测试类
public class Test{
public static void main(String[] args) {
System.out.println(Num.FOUR.getStr());
Num.FOUR.setStr("四");
System.out.println(Num.FOUR.getStr());
}
}

枚举侧常规用法:

//常量类(枚举类)
enum Num {
ONE(1, "小米"),TWO(2, "华为"),THREE(3, "苹果"),FOUR(4, "菠萝"),FIVE(5, "坦克");
//构造方法
Num (int index,String name){
this.index = index;
this.name = name;
} //成员变量
int index;
String name; //get方法
int getIndex(){
return index;
}
String getName(){
return name;
}
//set方法
void setIndex(int index){
this.index = index;
}
void setName(String name){
this.name = name;
} //根据index获取 name
static String getNameByIndex(int idx){
for (Num n : Num.values()) {
if (n.getIndex() == idx) {
return n.name;
}
}
return "没有找到";
} } //测试类
public class Test{
public static void main(String[] args) {
System.out.println(Num.getNameByIndex(3));
}
}

如何理解java枚举,看例子的更多相关文章

  1. 深入理解Java枚举

    深入理解Java枚举 重新认识Java枚举 老实说,挺羞愧的,这么久了,一直不知道Java枚举的本质是啥,虽然也在用,但是真不知道它的底层是个啥样的 直到2020年4月28日的晚上20点左右,我才真的 ...

  2. 深入理解Java枚举类型(enum)

    https://blog.csdn.net/javazejian/article/details/71333103 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(en ...

  3. 理解Java枚举类型

    (参考资料:深入理解java enum) 1.原理:对编译后的class文件javap反编译可以看出,定义的枚举类继承自java.lang.Enum抽象类且通过public static final定 ...

  4. 夯实Java基础系列14:深入理解Java枚举类

    目录 初探枚举类 枚举类-语法 枚举类的具体使用 使用枚举类的注意事项 枚举类的实现原理 枚举类实战 实战一无参 实战二有一参 实战三有两参 枚举类总结 枚举 API 总结 参考文章 微信公众号 Ja ...

  5. 深入理解 Java 枚举

  6. 全面理解Java内存模型(JMM)及volatile关键字(转载)

    关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoad ...

  7. 深入理解Java类加载器(ClassLoader) (转)

    转自: http://blog.csdn.net/javazejian/article/details/73413292 关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Ja ...

  8. 全面理解Java内存模型(JMM)及volatile关键字(转)

    原文地址:全面理解Java内存模型(JMM)及volatile关键字 关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型( ...

  9. 秒懂系列,超详细Java枚举教程!!!

    所有知识体系文章,GitHub已收录,欢迎Star!再次感谢,愿你早日进入大厂! GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual ...

随机推荐

  1. C语言中Linux环境下编译与链接

    编写一个简单的 hello.c 文件,以此为例. 1.编译并链接一个完全包含于一个源文件的C程序. gcc hello.c gcc -Wall hello.c gcc -o hello hello.c ...

  2. 冰河教你一次性成功安装K8S集群(基于一主两从模式)

    写在前面 研究K8S有一段时间了,最开始学习K8S时,根据网上的教程安装K8S环境总是报错.所以,我就改变了学习策略,先不搞环境搭建了.先通过官网学习了K8S的整体架构,底层原理,又硬啃了一遍K8S源 ...

  3. JZOJ2020年8月11日提高组T4 景点中心

    JZOJ2020年8月11日提高组T4 景点中心 题目 Description 话说宁波市的中小学生在镇海中学参加计算机程序设计比赛,比赛之余,他们在镇海中学的各个景点参观.镇海中学共有n个景点,每个 ...

  4. Spring Boot 实现看门狗功能 (调用 Shell 脚本)

    需要实现看门狗功能,定时检测另外一个程序是否在运行,使用 crontab 仅可以实现检测程序是否正在运行,无法做到扩展,如:手动重启.程序升级(如果只需要实现自动升级功能可以使用 inotify)等功 ...

  5. cookie倒计时

    使用cookie倒计时60s Vue实例创建一个变量time=0 生命周期一般是created,给time赋值一个cookie的键值-当前的时间(因为刚进入页面这时是没有cookie的,所以time变 ...

  6. PyQt(Python+Qt)学习随笔:QSlider滑动条部件功能简介

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer输入部件中的Horizo ...

  7. PyQt(Python+Qt)学习随笔:Qt Designer中部件的layoutDirection属性

    layoutDirection属性保存的是部件的布局方向,有三个取值: 在部件上设置布局方向时,它将传播到部件的子级,但不会传播到作为窗口的子级,也不会传播到已显式调用setLayoutDirecti ...

  8. 搭建ARL资产安全灯塔

    老年人了,只能靠安装部署项目混混日子这样~ 简介: 斗象TCC团队正式发布「ARL资产安全灯塔」开源版,该项目现已上线开源社区GitHub.ARL旨在快速侦察与目标关联的互联网资产,构建基础资产信息库 ...

  9. PageRank 算法-Google 如何给网页排名

    公号:码农充电站pro 主页:https://codeshellme.github.io 在互联网早期,随着网络上的网页逐渐增多,如何从海量网页中检索出我们想要的页面,变得非常的重要. 当时著名的雅虎 ...

  10. 题解-Happy New Year

    题解-Happy New Year Happy New Year 给定 \(n\),\(m\) 和 \(k\).有一个序列 \(a\{m\}\) 初始值为 \(0\).有 \(n\) 种操作,每种可以 ...