为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 网络编程 > 其它综合 正文

讲解一下java枚举(enum)以及使用方法

三叶资源网 2022-11-18 19:18:50 其它综合 123 ℃ 0 评论

在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。

例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。

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是单一继承),但可以继承接口。

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
系统服务微信扫码支付超级列表框置行色模拟红绿灯代理服务器源码算法笔记关键词监控借呗goproxy选择夹图片组图片拼接Printable扒站工具通用型python orc识别火山安卓TCP通信仓库管理加密解密微信域名拦截AES高效加解密
最新评论