如何理解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 ...
随机推荐
- 【NOIP2017提高A组模拟9.17】组合数问题
[NOIP2017提高A组模拟9.17]组合数问题 题目 Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数. 举个例子,将{1,2,3}拆分成2 个 ...
- JZOJ8月10日提高组T2 Fix
JZOJ8月10日提高组T2 Fix 题目 Description There are a few points on a plane, and some are fixed on the plane ...
- MySQL重做日志(redo log)
前面介绍了三种日志:error log.slow log.binlog,这三种都是 Server 层的.今天的 redo log 是 InnoDB引擎专有的日志文件. 为什么要有 redo log 用 ...
- vue上传视屏或者图片到七牛云
首先下载七牛云的JavaScript-SDK npm install qiniu-js 下载完成JavaScript-SDK以后就可以上传图片信息了 <template> <div& ...
- C++编程指南续
三. 命名规则 比较著名的命名规则当推Microsoft公司的"匈牙利"法,该命名规则的主要思想是"在变量和函数名中加入前缀以增进人们对程序的理解".例如所有的 ...
- buuctf-web-[极客大挑战 2019]BuyFlag 1
打开网页,然后发现menu中有个buyflag的连接,点进去 如果你想买这个flag ,你必须是来自CUIT的一名学生,还必须回答正确的密码.简单了解,我们查看源码,发现思路 POST方式传入两个参数 ...
- Python链式赋值执行顺序及执行方式的证明
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在<关于Python链式赋值的赋值顺序问题& ...
- PyQt(Python+Qt)学习随笔:QAbstractItemView的showDropIndicator属性
老猿Python博文目录 老猿Python博客地址 概述 QAbstractItemView的showDropIndicator属性用于控制在拖拽过程中显示当前拖拽到的位置,当释放时则在当前拖拽位置覆 ...
- VMware-workstation-full-10.0.4安装
1.下载安装包 链接:https://pan.baidu.com/s/1SBd3KP4Nxk-RaHLv7HIYTw 提取码:8zkm 2.安装VMware-workstation 双击安装包 选择典 ...
- 云服务器AWD平台搭建
开学后实验室来了几个新同学,在线上CTF方面大家一直在持续学习,但AWD模式的CTF我们练习并不多,所以准备搭建一个AWD平台用于实验室成员的线下赛攻防练习. 最开始的是防灾科技大学的线下AWD靶场: ...