如何理解java枚举,看例子
先来看一下不用枚举怎么表示常量:
//常量类
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枚举,看例子的更多相关文章
- 深入理解Java枚举
深入理解Java枚举 重新认识Java枚举 老实说,挺羞愧的,这么久了,一直不知道Java枚举的本质是啥,虽然也在用,但是真不知道它的底层是个啥样的 直到2020年4月28日的晚上20点左右,我才真的 ...
- 深入理解Java枚举类型(enum)
https://blog.csdn.net/javazejian/article/details/71333103 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(en ...
- 理解Java枚举类型
(参考资料:深入理解java enum) 1.原理:对编译后的class文件javap反编译可以看出,定义的枚举类继承自java.lang.Enum抽象类且通过public static final定 ...
- 夯实Java基础系列14:深入理解Java枚举类
目录 初探枚举类 枚举类-语法 枚举类的具体使用 使用枚举类的注意事项 枚举类的实现原理 枚举类实战 实战一无参 实战二有一参 实战三有两参 枚举类总结 枚举 API 总结 参考文章 微信公众号 Ja ...
- 深入理解 Java 枚举
- 全面理解Java内存模型(JMM)及volatile关键字(转载)
关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoad ...
- 深入理解Java类加载器(ClassLoader) (转)
转自: http://blog.csdn.net/javazejian/article/details/73413292 关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Ja ...
- 全面理解Java内存模型(JMM)及volatile关键字(转)
原文地址:全面理解Java内存模型(JMM)及volatile关键字 关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型( ...
- 秒懂系列,超详细Java枚举教程!!!
所有知识体系文章,GitHub已收录,欢迎Star!再次感谢,愿你早日进入大厂! GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual ...
随机推荐
- MOS管基础知识
一些关于MOS管的基础知识,很多资料来源于网络. 场效应管(FET)分类:(按材料) 1. 结型 2. 绝缘栅型(MOS) 耗尽型:在SiO2绝缘层中掺入了大量的碱金属正离子Na+或K+(制造P沟道耗 ...
- 通过 GraalVM 将 Java 程序编译成本地机器码!
前言 2018年4月,Oracle Labs新公开了一项黑科技:Graal VM. 这是一个在HotSpot虚拟机基础上增强而成的跨语言全栈虚拟机,可以作为"任何语言"的运行平台使 ...
- Android的Toolbar(含溢出菜单设置[弹出菜单的使用])的使用PopMenu的样式
http://blog.csdn.net/yingtian648/article/details/52432438(转载) 1.在Toolbar.xml中设置弹出菜单的风格(app:popupThem ...
- go语言之---数组(array)和切片(slice)
一.数组 1.什么是数组? 1.数组是一系列同一类型数据的集合 2.数组中包含的每个数据被称为数组元素 3.一个数组中包含的元素个数成为数组长度 4.数组的长度是固定的 5.一个数组可以由零个或者多个 ...
- Java数据结构(十四)—— 平衡二叉树(AVL树)
平衡二叉树(AVL树) 二叉排序树问题分析 左子树全部为空,从形式上看更像一个单链表 插入速度没有影响 查询速度明显降低 解决方案:平衡二叉树 基本介绍 平衡二叉树也叫二叉搜索树,保证查询效率较高 它 ...
- 区块链学习7:超级账本项目Fabric中的背书、背书节点、背书策略、背书签名
☞ ░ 前往老猿Python博文目录 ░ 在Hyperledger Fabric区块链中,有背书节点进行背书,Hyperledger Fabric 使用背书策略来定义哪些节点需要执行交易. Hyper ...
- 第15.20节 PyQt(Python+Qt)入门学习:QColumnView的作用及开发中对应Model的使用
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 在Qt Designer的Item Views(Model-based)部件中,Colum ...
- neo4j数据库数据转移,从阿里云转移到windows服务器
1.从阿里云迁移neo4j时需停掉neo4j数据库,在neo4j的bin目录下输入 ./neo4j stop 2.将数据备份到一个文件中 ./neo4j-admin dump --database=g ...
- Day7 【Scrum 冲刺博客】
每日会议总结 昨天已完成的工作 方晓莹(PIPIYIng) 对接车位管理接口 处理对接接口遇到的bug和错误 方子茵(Laa-L) 暂无 黄芯悦(Sheaxx) 完成住户车位查询页面 完成住户物业报修 ...
- 百度前端技术学院-基础-day3
2020.9.15 第三天的课程内容,复习了一些CSS的基础属性(果然不用就会忘). 学习了一些新的属性,比如text-shadow.text-indent(还不是很清楚).font-style等等. ...