public enum Color {
RED, YELLOW, BLUE;
}

说明

使用的是enum关键字而不是class

多个枚举变量之间用 逗号 隔开

枚举变量名大写,多个单词之间用 _ 隔开。 如。 ALL_NUM...

定义完枚举变量后, 用分号 结束。如果只有枚举变量,而没有自定义变量,分号可以省略。

使用 只需要【类名.变量名】就可以了,和使用静态变量一样。

方法

values()

这个方法会返回包括所有枚举变量的数组

for (Color color : Color.values()) {
// 下标
System.out.println(color.ordinal());
// 枚举变量名字
System.out.println(color.name());
// 同上
System.out.println(color.toString());
}
// 比较的是下标
System.out.println(Color.valueOf("YELLOW").compareTo(Color.valueOf("BLUE")));

valueOf(String name)

它的作用是传来一个字符串,然后将它转变为对应的枚举变量 .

字符串和定义枚举变量的字符串必须一样,并且区分大小写。如果不存在会抛出异常。java.lang.IllegalArgumentException

public enum Weekday {
MON(1),TUS(2),WED(3),THU(4),FRI(5),SAT(6),SUN(0); private int index; private Weekday(int index){
this.index = index;
}
}

说明

定义的枚举变量 必须 在第一行。以 分号结束。

构造函数只能是 private 的。否则 编译不通过

自定义的 index 和 下标 不冲突。

枚举类中的抽象类

实例:

public enum Color {
RED() {
@Override
public Color getNextColor() {
return YELLOW;
}
},
YELLOW(){
@Override
public Color getNextColor() {
return BLUE;
}
},
BLUE(){
@Override
public Color getNextColor() {
return RED;
}
}; /**
* 获取下一种颜色
* @return
*/
public abstract Color getNextColor();
}
Color yellow = Color.valueOf("YELLOW");
System.out.println(yellow.getNextColor()); // BLUE

枚举类的原理:

public enum Weekday {
MON(1),TUS(2),WED(3),THU(4),FRI(5),SAT(6),SUN(0); private int index; private Weekday(int index){
this.index = index;
}
}

javap 反编译 Weekday.class

public final class enums.Weekday extends java.lang.Enum<enums.Weekday> {
public static final enums.Weekday MON;
public static final enums.Weekday TUS;
public static final enums.Weekday WED;
public static final enums.Weekday THU;
public static final enums.Weekday FRI;
public static final enums.Weekday SAT;
public static final enums.Weekday SUN;
public static enums.Weekday[] values();
public static enums.Weekday valueOf(java.lang.String);
static {};
}

是 final 类,不能被继承。

继承了 java.lang.Enum 类。只能实现接口了。

在Color枚举类中定义的 RED、、、本身是一个 Color对象的引用。Color RED = new Color(); 使用匿名内部类方式:

Color RED = new Color() {
@override
public Color getNextColor() {
return YELLOW;
}
}
在枚举类中 只用写 RED(){...} JVM会完成其它操作

枚举类在switch中应用

switch (color) {
case RED:
color = Color.GREEN;
break;
case YELLOW:
color = Color.RED;
break;
case GREEN:
color = Color.YELLOW;
break;
}

枚举类实现接口

public interface Behaviour {
void print();
String getInfo();
}
public enum Weekday implements Behaviour{
MON(1),TUS(2),WED(3),THU(4),FRI(5),SAT(6),SUN(0); private int index; Weekday(int index){
this.index = index;
} @Override
public void print() {
System.out.println(this.index + ":" + toString());
} @Override
public String getInfo() {
return toString();
}
}

枚举实现 单例模式

public enum DataSourceEnum {
DATASOURCE;
private DBConnection connection = null;
private DataSourceEnum() {
connection = new DBConnection();
}
public DBConnection getConnection() {
return connection;
}
}

Enum介绍的更多相关文章

  1. protobuf 的enum与string转换

    c/c++ enum 介绍 说起c/c++ 的enum,比起python 真的是方便简洁 enum type{ type1 = 0, type2 } enum的元素对应的int 默认从0 开始依次增加 ...

  2. 第11课 - enum, sizeof, typedef 分析

    第11课 - enum, sizeof, typedef 分析 1. enum介绍 (1)enum是C语言中的一种自定义类型,和struct.union地位相同,格式如下: // enum每个值的最后 ...

  3. Java 语言中 Enum 类型的使用介绍

    Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常 ...

  4. Java 语言中 Enum 类型的使用介绍【转载】

    简介:本文主要介绍了 Java 语言中枚举类型,以及如何定制 Enum 类型的定义,如何正确使用 Enum 类型. From:http://www.ibm.com/developerworks/cn/ ...

  5. mysql中set和enum使用(简单介绍)

    简单介绍 SET类型 在创建表时,就指定SET类型的取值范围. 属性名 SET('值1','值2','值3'...,'值n') 其中,“属性名”参数指字段的名称:“值n”参数表示列表中的第n个值,这些 ...

  6. Java中的Enum(枚举)用法介绍

    1. 关于Java Enum:学过C/C++等语言的人,应该都对Enum类型略知一二.Enum一般用来表示一组相同类型的常量.如性别.日期.月份.颜色等.对这些属性用常量的好处是显而易见的,不仅可以保 ...

  7. 免费高效实用的.NET操作Excel组件NPOI(.NET组件介绍之六)

    很多的软件项目几乎都包含着对文档的操作,前面已经介绍过两款操作文档的组件,现在介绍一款文档操作的组件NPOI. NPOI可以生成没有安装在您的服务器上的Microsoft Office套件的Excel ...

  8. 免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)

    在生活中有一种东西几乎已经快要成为我们的另一个电子”身份证“,那就是二维码.无论是在软件开发的过程中,还是在普通用户的日常中,几乎都离不开二维码.二维码 (dimensional barcode) , ...

  9. 高效而稳定的企业级.NET Office 组件Spire(.NET组件介绍之二)

    在项目开发中,尤其是企业的业务系统中,对文档的操作是非常多的,有时几乎给人一种错觉的是”这个系统似乎就是专门操作文档的“.毕竟现在的很多办公中大都是在PC端操作文档等软件,在这些庞大而繁重的业务中,单 ...

随机推荐

  1. webpack使用extract-text-webpack-plugin打包时提示错误Use Chunks.groupsIterable and filter by instanceof Entryp

    转自:https://blog.csdn.net/gezilan/article/details/80020417 前提条件: 当前时间是2018年4月20日. webpack的最新版本为是 v4.6 ...

  2. UNION ALL 视图 'ImprotHIS2012.dbo.ImportHISData' 不可更新,因为没有找到分区依据列。 Severity 16 State 12

    -- 3 更正措施,使约束check一次 Alter Table ImprotHIS_Bak_2011.dbo.ImportHISData with check Check Constraint al ...

  3. java.sql.SQLException: Incorrect string value: '\xF0\x9F\x9A\x80\xF0\x9F...' for column 'name' at row 1

    1.异常提示: 12:59:10.000 [http-nio-8080-exec-40] DEBUG o.s.j.s.SQLStateSQLExceptionTranslator - Extracte ...

  4. 软件项目技术点(1)——d3.interpolateZoom-在两个点之间平滑地缩放平移

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 软件参考d3的知识点 我们在软件中主要用到d3.js的核心函数d3.interpolateZoom - 在两个点之间平滑地缩放平移.请 ...

  5. 表格 滚动条 (tbody部分滚动)

    本文是从简书复制的, markdown语法可能有些出入, 想看"正版"和更多内容请关注 简书: 小贤笔记 html <table> <thead> < ...

  6. C++ VS编译问题--VS下生成DLL,但没有生成Lib的解决办法

    如果项目生成了.dll文件,但是没有生成.lib文件,这是由于项目的设置错误,应作如下修改: 项目->属性->链接器->输入->模块定义文件,设置你的模块定义文件,默认为lib ...

  7. 04_ActiveMQ事务与三种签收方式

    [ActiveMQ添加事务] 添加事务主要注意两点: 1.修改Session配置,启用事务 /** * 3.通过Connection对象创建Session会话(上下文环境对象),用于接收消息. * 参 ...

  8. Android weex的集成和开发

    最近为了项目需要(实际上是为了年底KPI),领导要求用3天时间,学习并使用weex开发一个页面,说实话,压力山大.在这之前压根儿就没听说过啊,一脸懵逼 无奈之余只能Google了,惊喜的发现weex的 ...

  9. 【Web crawler】print_all_links

    How to repeat Procedures&Control CS重要概念 1.1 过程procedures 封装代码,代码重用 1.2 控制Control DEMO # -*- codi ...

  10. Java 多线程使用

    工作中遇到的问题,记录下解决的思路 问题: 对磁盘进行碎片化测试(比如说,磁盘空间是16G),从64K开始写文件,写满后删除一半,然后写32K 的数据,写满后删除一半...直到4K写满删除一般算是结束 ...