上次已经为大家介绍过java枚举的概念是什么的主要内容了。今天再来为大家介绍一些相关的知识,也是关于java枚举的一些内容,也就是它的特性以及如何赋值,一起来了解一下吧。

首先说一下,java中枚举的特性是什么?

枚举的特性,归结起来就是一句话:

除了不能继承,基本上可以将enum看做一个常规的类。但是这句话需要拆分去理解。

1.我们都知道,枚举是可以添加方法的,枚举值默认为从0开始的有序数值 。那么问题来了:如何为枚举显示的赋值。

Java不允许使用=为枚举常量赋值

如果你接触过C/C++,你肯定会很自然的想到赋值符号= 。在C/C++语言中的enum,可以用赋值符号=显示的为枚举常量赋值;但是, Java语法中却不允许使用赋值符号=为枚举常量赋值。

例:C/C++语言中的枚举声明,代码如下所示:typedef enum

{

ONE = 1

, TWO

, THREE = 3

, TEN = 10

}

Number;

枚举可以添加普通方法、静态方法、抽象方法、构造方法

Java虽然不能直接为实例赋值,但是它有更优秀的解决方案:为enum添加方法来间接实现显示赋值。

创建enum时,可以为其添加多种方法,甚至可以为其添加构造方法。

另外,注意一个细节:如果要为enum定义方法,那么必须在enum的最后一个实例尾部添加一个分号。此外,在enum中,必须先定义实例,不能将字段或方法定义在实例前面。否则,编译器会报错。

举例说明:全面展示如何在枚举中定义普通方法、静态方法、抽象方法、构造方法。代码如下所示:public enum ErrorCode

{

OK(0)

{

public String getDescription()

{

return "成功";

}

}

, ERROR_A(100)

{

public String getDescription()

{

return "错误A";

}

}

, ERROR_B(200)

{

public String getDescription()

{

return "错误B";

}

};

private int code;

// 构造方法:enum的构造方法只能被声明为private权限或不声明权限

private ErrorCode(int number)

{ // 构造方法

this.code = number;

}

public int getCode()

{ // 普通方法

return code;

} // 普通方法

public abstract String getDescription(); // 抽象方法

public static void main(String args[])

{ // 静态方法

for (ErrorCode s: ErrorCode.values())

{

System.out.println("code: " + s.getCode() + ", description: " + s.getDescription());

}

}

}

注:上面的例子并不可取,仅仅是为了展示枚举支持定义各种方法。下面是一个简化的例子

举例说明:一个错误码枚举类型的定义

本例和上例的执行结果完全相同。代码如下所示:public enum ErrorCodeEn

{

OK(0, "成功")

, ERROR_A(100, "错误A")

, ERROR_B(200, "错误B");

ErrorCodeEn(int number, String description)

{

this.code = number;

this.description = description;

}

private int code;

private String description;

public int getCode()

{

return code;

}

public String getDescription()

{

return description;

}

public static void main(String args[])

{ // 静态方法

for (ErrorCodeEn s: ErrorCodeEn.values())

{

System.out.println("code: " + s.getCode() + ", description: " + s.getDescription());

}

}

}

2.枚举可以实现接口

enum可以像一般类一样实现接口。

同样是实现上一节中的错误码枚举类,通过实现接口,可以约束它的方法。代码如下所示:public interface INumberEnum

{

int getCode();

String getDescription();

}

public enum ErrorCodeEn2 implements INumberEnum

{

OK(0, "成功")

, ERROR_A(100, "错误A")

, ERROR_B(200, "错误B");

ErrorCodeEn2(int number, String description)

{

this.code = number;

this.description = description;

}

private int code;

private String description;

@Override

public int getCode()

{

return code;

}

@Override

public String getDescription()

{

return description;

}

}

3.枚举不可以继承。

enum不可以继承另外一个类,当然,也不能继承另一个enum 。

因为enum实际上都继承自 java.lang.Enum类,而Java不支持多重继承,所以enum不能再继承其他类,当然也不能继承另一个enum。

总的来说java中枚举的特性还是很简单易懂的,这也不需要花费太多的时间去理解这个知识点。java中的知识还是非常丰富的,想要了解更多java基础知识,敬请关注奇Q工具网。

推荐阅读:

java定义枚举并赋值_java中枚举的特性是什么?如何赋值?相关推荐

  1. java 枚举的继承_java中枚举类可以被继承吗?

    java 枚举类 java中,使用关键字enum来定义枚举类,枚举类是一个特殊的类,大部分功能和普通类是一样的,区别为: ● 枚举类继承了java.lang.Enum类,而不是默认的Object类.而 ...

  2. java 调用枚举种方法_Java中枚举类型的一种使用方式

    今天改同事的代码发现同事的代码中有大量的if else语句.很不美观而且可读性太差. 因为需要给前端一个key,value的列表.这个列表写死.然而同事的代码. 放几张图,大家自己感受.我都不知道以后 ...

  3. java定义接口的关键字_Java中定义接口的关键字是什么?

    Java中定义接口的关键字是"interface"."interface"是面向对象编程语言中接口操作的关键字,功能是把所需成员组合起来,用来装封一定功能的集合 ...

  4. java 数组对象属性数组_Java中数组的特性

    数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具有固定的长度,并且在内存中占据连续的空间.在C,C++等语言中,数组的定义简洁清晰,而在java中确有一些会让人迷惑的特性. ...

  5. java中 enum什么意思_Java中枚举Enum的使用详解

    在某些情况下,一个类的对象时有限且固定的,如季节类,它只有春夏秋冬4个对象这种实例有限且固定的类,在 Java 中被称为枚举类: 在 Java 中使用 enum 关键字来定义枚举类,其地位与 clas ...

  6. java枚举很少被使用_java中枚举原来还可以这么用

    前言 相信不少java开发者写过状态变更的业务,比如订单流程.请假流程等等.一般会搞一个状态标识来标识生命周期的某个阶段.很多人会写这种逻辑: 如果流程几十个岂不是要if到爆炸.还有这"0& ...

  7. JAVA中string的赋值_Java中关于String赋值的两种形式

    说明: String在java中是使用频率很高的一个类,之前使用的时候并没有过多的在意,只知道有两种赋值方式,一种是采用字面值方式(String string1 = "string" ...

  8. java声明和初始化数组_Java 中初始化数组

    数组是一种有用的数据类型,用于管理在连续内存位置中建模最好的集合元素.下面是如何有效地使用它们. -- Chris Hermansen(作者) 有使用 C 或者 FORTRAN 语言编程经验的人会对数 ...

  9. java如何忽略过程值_Java中容易被你忽略的细节(四)

    1.在一个程序当中代码段访问了同一个对象从单独的并发的线程当中,那么这个代码段叫"临界区" 怎么解决呢:使用同步的机制对临界区进行保护 同步的两种方式:同步块和同步方法 对于同步来 ...

最新文章

  1. uitableView 选择跳过后, 跳回 颜色变化 问题
  2. 【Plant Cell】突破!加入一种酵母,可显著提高水稻氮利用率及产量!
  3. 推出第一个免费工具CCT
  4. B+树检索的时间复杂度
  5. webdriver+python 对三大浏览器的支持
  6. 人群频率 | gnomAD数据库简介 (一)
  7. 不要过打折的生活,当你发现这些你有了,说明你开始成熟了
  8. 《强化学习》中的第13章:策略梯度方法
  9. Unity制作自适应透明背景(PC端)
  10. 移动端文字向左无缝滚动特效(原生纯js哦)
  11. vue 如何使用md5密码加密
  12. 【YOLOv5-6.x】设置可学习权重结合BiFPN(Add操作)
  13. 多目标优化 MOP (一):遗传算法 SPEA 1999
  14. 保存numpy数组到excel
  15. c语言小白能自学吗,零基础小白学编程,该如何入门?
  16. 四川E900s-Hi3798MV100-黑盒8G版-黄标签高安版-5800-2AHPM6B-当贝桌面强刷卡刷包
  17. 跟我学Linux系统管理 第三讲 磁盘管理
  18. 原始套接(ARP协议的使用)
  19. Sqlmap 22.05.22.02
  20. 二分图的最大匹配-解决匹配问题

热门文章

  1. 业务异步写mysql数据库_把重要的业务日志异步批量写入数据库
  2. JPA criteria 查询:类型安全与面向对象
  3. html静态网站登陆验证,静态页面js加密URL密码验证
  4. CSS高级篇——属性选择器 (attribute selectors)
  5. 计算机基础教学中存在的问题,任职教育院校中计算机基础课程教学中存在的问题及对策...
  6. 首批 | 易知微加入“新华网元宇宙及 AIGC 创新联盟”,探索AIGC数字人深度应用
  7. 【英语学习】关于音标的汇总图分享
  8. Matlab:FIR滤波器设计和音频信号滤波去噪
  9. C语言:判断一个数是否为素数/质数
  10. java五子棋AI算法人机对战(春物彩羽版可下载试玩PC端)