如何理解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 ...
随机推荐
- 【刷题笔记】DP优化-单调队列优化
单调队列优化 眼界极窄的ZZ之前甚至不会单调队列--(好丢人啊) 单调队列优化的常见情景: 转移可以转化成只需要确定一个维度,而且这个维度的取值范围在某个区间里 修剪草坪 这个题学长讲的好像是另外一个 ...
- 自定义orm字段
class MyCharField(models.Field): def __init__(self,max_length,*args,**kwargs): self.max_length = max ...
- jenkins.war
一准备工作 首先你得打开SSH 二将jenkins.war转移到jenkins.war /usr/local/tomcat/apache-tomcat-7.0.63/webapps/中 然后启动tom ...
- 牛客巅峰赛S2第6场题解
牛客编程巅峰赛S2第6场 A-StringⅡ 题目 题目描述 给出一个仅包含小写字母的字符串s,你最多可以操作k次,使得任意一个小写字母变为与其相邻的小写字母(ASCII码差值的绝对值为1),请你求出 ...
- MySQL ERROR 1040: Too many connections
如题,本章主要讲下当服务器出现 ERROR 1040: Too many connections错误时的一些处理心得. max_connections查看 ## 查看最大连接数 SHOW VARIAB ...
- 第5.2节 Python的函数参数收集
函数的参数使用除了常规的位置参数和关键字参数外,还支持可变个数的函数参数,这种支持可变个数的参数方法称为参数收集,对应的参数称为收集参数. 一.参数收集的定义 Python的函数支持可变不定数量的参数 ...
- Python中迭代循环使用比较多的range函数的作用
range函数用于生成一个不可变的数字序列可迭代对象,类型为range,该数字序列通常用于在 for 循环中循环指定的次数. 具体可参考:<Python中与迭代相关的函数>的详细介绍 老猿 ...
- PyQt(Python+Qt)学习随笔:gridLayout的layoutHorizontalSpacing和layoutVerticalSpacing属性
layoutHorizontalSpacing和layoutVerticalSpacing属性在Qt Designer中是网格布局(gridLayout)和表单布局(formLayout)都有的属性, ...
- Photoshop 2020特别版,内置多款实用插件,功能强大
Adobe Photoshop 2020特别21.2.1.265版 组件精简 同时优化软件配置,添加多款实用强大的插件,具体详细修改精简内容如下: -精简运行库及更新组件: -精简创意云Creativ ...
- 连接数从异常到 300 到 5(RDS MySQL 的一个大坑•后记)
在 <记 RDS MySQL 的一个大坑> 中,我提到遇到 User juxxxxxxxxxx already has more than 'max_user_connections' a ...