讲解一下java枚举(enum)以及使用方法
xsobi 2025-04-24 10:02 8 浏览
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。
例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。
enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 Java.lang 包中,在上面的这种情况下,enum就能派上用场了。枚举类型的用途不仅如此,具体可用场景可看下面的介绍
1、常量
以前我们定义一个常量通常都是使用 public static final …… 定义的,如下面:
public static final CONSTANT_STR = "TEST";
或者使用接口定义的变量,因为接口定义的变量默认都是public static final,如下:
/**
* 星期的常量接口
*/
public interface IWeekConstants {
String MON = "Mon";
String TUE = "Tue";
String WED = "Wed";
String THU = "Thu";
String FRI = "Fri";
String SAT = "Sat";
String SUN = "Sun";
}
有了枚举我们可以使用下面的方式:
public enum WeekEnum {
MON, TUE, WED, THU, FRI, SAT, SUN;
}
解释:创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。
上面那段代码声明的enum对象实际上调用了7次Enum(String name, int ordinal) 这个构造函数。(name 是常量,上面是MON,TUE等,ordinal是被创建顺序)
new Enum("MON",0);
new Enum("TUE",1);
new Enum("WED",2);
。。。。。。
2、switch
当我们用switch时,一般都是使用int和char,但其实枚举也可以用在switch中,而且可能使用枚举,可以让我们的代码的可读性更强。下面是枚举使用enum的例子
enum Color{
GREEN, YELLOW, RED
}
public class TrafficLight {
Color color = Color.RED;
public void change() {
switch (color) {
case RED:
System.out.println("红色");
break;
case YELLOW:
System.out.println("黄色");
break;
case GREEN:
System.out.println("绿色");
break;
}
}
}
3、向枚举中添加新方法 + 遍历
我们使用常量的时候,我们使用接口的时候是可以有值与之对应的,如上面IWeekConstants 接口的MON的值是Mon,但枚举好像没能标示出这种意义。下面我们就讨论该方式的实现和枚举类型的遍历
枚举类型提供了构造函数,我们可以通过构造函数和覆写toString方法来实现。实现代码如下:
package com.zcr.test;
enum ActionTypeEnum{
//通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错
//赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错
下载(1,"xiazai"),访问(2,"fangwen");
int index;
String name;
private ActionTypeEnum(int index,String name){
this.index = index;
this.name = name;}public int getIndex(){return index;}
public void setIndex(int index){
this.index = index;}
public String getName()
{return name;}
public void setName(String name)
{this.name = name;}}
public class EnumTest{
public static void main(String[] args){
ActionTypeEnum[] actionTypeEnums = ActionTypeEnum.values();
for(ActionTypeEnum actionTypeEnum : actionTypeEnums){
System.out.println("name=" + actionTypeEnum.getName());
System.out.println("index= " + actionTypeEnum.getIndex());
System.out.println("oridary=" + actionTypeEnum.ordinal());
System.out.println("this = " + actionTypeEnum);
System.out.println("下载值:" + actionTypeEnum.valueOf("下载"));
System.out.println("name()方法= " + actionTypeEnum.name());
System.out.println("--------------叫我分割线------------------");}}}
运行结果:
name=xiazai
index= 1
oridary=0
this = 下载
下载值:下载
name()方法= 下载
--------------叫我分割线------------------
name=fangwen
index= 2
oridary=1
this = 访问
下载值:下载
name()方法= 访问
--------------叫我分割线------------------
4、总结
可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承),但可以继承接口。
- 上一篇:C#-枚举定义与使用 052
- 下一篇:Java的枚举类型用法介绍
相关推荐
- 就3张图,直接搞懂TCP的11种状态!
-
号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部...
- TCP/IP网络通信介绍(tcp ip通信)
-
一张图简单介绍TCP/IP网络通信各方面的知识点。核心内容如下...
- 「Qt入门第37篇」 网络(七)TCP(一)
-
导语TCP即TransmissionControlProtocol,传输控制协议。与UDP不同,它是面向连接和数据流的可靠传输协议。也就是说,它能使一台计算机上的数据无差错的发往网络上的其他计算机,...
- 终于搞懂了 TCP 的 11 种状态,太不容易了…
-
后台回复"666",获取新资料本来想写运维过程中,nginx服务器中time_wait的相关测试及解决方法的,然后发现TCP的状态需要先铺垫一下,于是就整理了这篇文章。网上很多大佬整理TCP三...
- 通讯协议:TCP & UDP 总结(通讯协议和通讯接口详解)
-
今日分享主题:TCP与UDP两种通讯协议的区别,从整体的视角上来看看他们的差异,这也是我们学习网络编程应该掌握的基础技术点。...
- 腾讯云国际站:为什么需要调整TCP内核参数?
-
本文由【云老大】TG@yunlaoda360撰写优化网络带宽利用率...
- 太厉害了,终于有人能把TCP/IP协议讲的明明白白了
-
从字面意义上讲,有人可能会认为TCP/IP是指TCP和IP两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用IP进行通信时所必须用到的协议群的统称。具体来说...
- 网络编程懒人入门(十三):一泡尿的时间,快速搞懂TCP和UDP的区别
-
本文引用了作者Fundebug的“一文搞懂TCP与UDP的区别”一文的内容,感谢无私分享。1、引言...
- TCP三次握手与四次挥手全解析:从协议原理到实战调优
-
#网络协议#TCP/IP#性能优化#后端开发...
- TCP是什么(什么叫tcp)
-
在计算机网络中,TCP被广泛应用于互联网通信中的数据传输,确保数据的可靠和有序传输。TCP是基于IP(InternetProtocol)的一种协议,它位于网络层之上,负责在网络上的各个节点之间建立可...
- 计算机网络:一文带大家轻松了解TCP/IP协议
-
今天和大家分享TCP/IP协议相关的知识,希望对朋友们了解计算机网络相关的知识提供一些帮助!一、TCP/IP协议实现与TCP/IP协议标准的概念...
- 软网推荐:优化TCP/IP为上网提速(22号天蝎座的运势)
-
我们在上网的时候主要使用的就是TCP/IP协议,但是很多人平时对这个协议并不了解。其实它和我们的网络运行非常密切,所以我们需要对其进行优化设置,进而更好的利用网络的带宽。接下来我们将通过专业的网站,配...
- 揭秘!扒一扒能加速互联网的QUIC协议
-
今天早上,一则新闻《谷歌希望凭借其QUIC协议加速互联网》引起了笔者注意,这篇新闻中提到,大约有一半来自Chrome浏览器对谷歌服务器的请求,现在由QUIC协议负责处理。QUIC是什么?我们光从字面上...
- TCP协议原理,有这一篇就够了(tcp原理理解)
-
先亮出这篇文章的思维导图:TCP作为传输层的协议,是一个软件工程师素养的体现,也是面试中经常被问到的知识点。在此,我将TCP核心的一些问题梳理了一下,希望能帮到各位。001.能不能说一说TC...
- TCP与UDP通信的区别(tcp、udp通信协议对比?)
-
一张有趣的图片你知道TCP与UDP协议通信传输的区别么?下面这幅图如果你看懂了,你也就理解了。不得不佩服,真是太有才了,太形象了。...
- 一周热门
- 最近发表
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- dedecms模版 (53)
- c 视频教程下载 (33)
- listview排序 (33)
- characterencodingfilter (33)
- getmonth (34)
- label换行 (33)
- android studio 3 0 (34)
- html转js (35)
- 索引的作用 (33)
- checkedlistbox (34)
- xmlhttp (35)
- mysql更改密码 (34)
- 权限777 (33)
- htmlposition (33)
- 学校网站模板 (34)
- textarea换行 (34)
- 轮播 (34)
- asp net三层架构 (38)
- bash (34)