如何理解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 ...
随机推荐
- Kubernetes 使用 Kubevirt 运行管理 Windows 10 操作系统
原文链接:https://fuckcloudnative.io/posts/use-kubevirt-to-manage-windows-on-kubernetes/ 最近我发现我的 Kubernet ...
- 【GDOI2014模拟】JZOJ2020年8月14日T2 网格
[GDOI2014模拟]JZOJ2020年8月14日T2 网格 题目 Time and Memory Limits Description 某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标 ...
- Feign 自定义 ErrorDecoder (捕获 Feign 服务端异常)
问题描述 Feign 客户端捕获不到服务端抛出的异常 问题解决 重新 ErrorDecoder 即可,比如下面例子中在登录鉴权时想使用认证服务器抛出 OAuth2Exception 的异常,代码如下: ...
- Spring Boot + JPA 多模块项目无法注入 JpaRepository 接口
问题描述 Spring Boot + JPA 多模块项目,启动报异常: nested exception is org.springframework.beans.factory.NoSuchBean ...
- 禅道的bug提交
- moviepy音视频剪辑:headblur函数遇到的ValueError assignment destination is read-only问题及解决办法
☞ ░ 前往老猿Python博文目录 ░ 一.运行环境 运行环境如下: python版本:3.7 opencv-python版本:4.2.0.34 numpy版本:1.19.0 二.错误案例代码及报错 ...
- AWD不死马与克制方法
一个简单的不死马如: <?php ignore_user_abort(true); set_time_limit(0); unlink(__FILE__); $file = '.3.php'; ...
- CTF写脚本
今天总结一下CTF如何写脚本快速得分....(比较菜,能力有限,大佬勿喷) 所谓的写脚本得分,就是利用了 python爬虫的思想,如果之前没有听说过的话,可以去爬虫的相关语法.如果是看网上的视频的话, ...
- pytorch 损失函数(nn.BCELoss 和 nn.CrossEntropyLoss)(思考多标签分类问题)
一.BCELoss 二分类损失函数 输入维度为(n, ), 输出维度为(n, ) 如果说要预测二分类值为1的概率,则建议用该函数! 输入比如是3维,则每一个应该是在0--1区间内(随意通常配合sigm ...
- C++ 有关指针作为函数参数的问题,自定义内存分配函数传递二级指针的问题
如题所示,我们主要讨论在自定义的内存分配函数中通常见到的代码如下所示: void Create(A** addr); 其中传递的参数是二级指针.为什么? 我们先看一下完整的动态内存分配函数的简单例子: ...