目录
    一、简介
    二、默认枚举类
    三、多值枚举类
    四、属性和方法
    五、构造函数
    六、重要方法
    七、引用参考

一、简介
    1、枚举类代表一组常量;
    2、枚举常量隐性声明为final static类型;
    3、每一个枚举常量代表了一个枚举类的对象;
    4、枚举类隐性实现了java.lang.Comparable接口和java.io.Serializable接口
    5、枚举类可以包涵多个构造函数

二、默认枚举类
    枚举类首先定义常量,其次才是属性、构造函数和方法。(注:常量名要大写)

     //创建默认枚举类
public enum DefaultEnum {
DEMOENUM1, DEMOENUM2, DEMOENUM3;
} //访问枚举对象
public class client {
public static void main(String[] args) {
DefaultEnum demoEnum = DefaultEnum.DEMOENUM1;
System.out.println(demoEnum);//输出:DEMOENUM1
}
}

三、多值枚举对象
    枚举对象可以包涵一个或多个值,值的类型可以任意基本类型。枚举对象的值在枚举类中定义后可定义setter方法修改,但是如非必要不要这么做,因为这会违背枚举对象常量的本质。

    //创建枚举类
public enum MutiValueEnum { DEMOENUM1(1, "hello"),
DEMOENUM2(2, "enum"); //枚举对象的变量
private int id;
private String value; //重写枚举类的默认构造器
MutiValueEnum(int id, String value) {
this.id = id;
this.value = value;
} //获得id属性的值
public int getId() { return this.id; } //获得value属性的值
public String getValue() { return this.value; }
} //访问枚举对象
public class client {
public static void main(String[] args) {
MutiValueEnum mutiValueEnum = MutiValueEnum.DEMOENUM1; System.out.println(mutiValueEnum);//输出:DEMOENUM1
System.out.println(mutiValueEnum.getId());//输出:1
System.out.println(mutiValueEnum.getValue());//输出:hello
}
}

四、属性和方法
    枚举类里的属性和方法是属于枚举常量的,所以枚举常量可以调用这些方法。我们可以在枚举类定义其他我们所需要的方法。其实,枚举类同正常类有许多相似之处,对于变量和方法,我们可以按照正常类里的属性和方法去使用,只不过我们不能通过new来创建对象,而是枚举类自行创建。注:枚举类里不能有抽象方法。

    //测试枚举类的属性和方法
public enum TestAttributeAndMethodOfEnum {
DEMOENUM; private int id;
private String value;
private boolean flag; //setter and getter
… //other method
public void TestMethod1() { … }
public void TestMethod2() { … } } //测试类
public class Client {
public static void main(String[] args) {
TestAttributeAndMethodOfEnum testEnum = TestAttributeAndMethodOfEnum.DEMOENUM; testEnum.setId(1);
testEnum.TestMethod1();

} }

五、构造函数
    同正常类一样,枚举类可以拥有多个构造函数。构造函数的参数要同枚举常量的值的数量相一致。并且枚举类的构造函数的可见性只能设为包可见或是私有,其次也不能通过new来创建枚举对象。由枚举类的使用类负责枚举对象的构建。

    enum Color
{
RED,
GREEN("light"),
BLUE(255,23,223); private String level;
private int r,g,b; //默认无参构造,在此可省略
//Color() { } //对应一个值的GREEN常量
Color(String level) {
this.level = level;
}
//对应三个值的BLUE常量
Color(int r, int g, int b) {
this.r = r;
this.g = g;
this.b = b;
}
}
public class Test
{
// Driver method
public static void main(String[] args)
{
Color c1 = Color.RED;
Color c2 = Color.GREEN;
Color c3 = Color.BLUE;
System.out.println(c1);

}
}
在上述例子中,枚举类会被内部的转换为
class Color
  {
public static final Color RED = new Color();
public static final Color GREEN = new Color("light");
public static final Color BLUE = new Color(255, 23, 223);
  }

六、重要方法
    values()                            返回枚举类的所有常量;
    ordinal()                           返回枚举常量的序号
    valueOf(String name)      返回名为name的枚举常量,如果存在。

    // 演示 values(), ordinal() 和 valueOf() 方法
enum Color
{
RED, GREEN, BLUE;
} public class Test
{
public static void main(String[] args)
{
Color arr[] = Color.values(); for (Color col : arr)
{
System.out.println(col + " at index "
+ col.ordinal());
} System.out.println(Color.valueOf("RED"));
//此行代码会返回IllegalArgumentException 异常,因为Color枚举类里没有名为WHITE的常量
System.out.println(Color.valueOf("WHITE"));
}
}

参考文献
    https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
    https://www.geeksforgeeks.org/enum-in-java/
    https://dzone.com/articles/java-enums-how-to-make-much-more-useful
    https://stackoverflow.com/questions/19600684/java-enum-with-multiple-value-types
    https://docs.oracle.com/javase/8/docs/api/

JAVA之enum类详解的更多相关文章

  1. java之StringBuffer类详解

    StringBuffer 线程安全的可变字符序列. StringBuffer源码分析(JDK1.6): public final class StringBuffer extends Abstract ...

  2. java之AbstractStringBuilder类详解

    目录 AbstractStringBuilder类 字段 构造器 方法   public abstract String toString() 扩充容量 void  expandCapacity(in ...

  3. java之StringBuilder类详解

    StringBuilder 非线程安全的可变字符序列 .该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍).如果可能,建议优先采用该类,因为在 ...

  4. java.lang.Thread类详解

    java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...

  5. Java中dimension类详解

    Java中dimension类详解 https://blog.csdn.net/hrw1234567890/article/details/81217788

  6. java之Matcher类详解

    在JDK 1.4中,Java增加了对正则表达式的支持. java与正则相关的工具主要在java.util.regex包中:此包中主要有两个类:Pattern.Matcher. Matcher  声明: ...

  7. java的ReentrantLock类详解

    ReentrantLock 能用于更精细化的加锁的Java类, 通过它能更清楚了解Java的锁机制 ReentrantLock 类的集成关系有点复杂, 既有内部类, 还有多重继承关系 类的定义 pub ...

  8. Java的String类详解

    Java的String类 String类是除了Java的基本类型之外用的最多的类, 甚至用的比基本类型还多. 同样jdk中对Java类也有很多的优化 类的定义 public final class S ...

  9. Java Properties工具类详解

    1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...

随机推荐

  1. 导入https证书

    摘 要 JSSE是一个SSL和TLS的纯Java实现,通过JSSE可以很容易地编程实现对HTTPS站点的访问.但是,如果该站点的证书未经权威机构的验证,JSSE将拒绝信任该证书从而不能访问HTTPS站 ...

  2. JAVA实现Base64编码的三种方式

    摘要: Javabase64编码的三种方式   有如下三种方式: 方式一:commons-codec.jar Java代码  1. String base64String="whuang12 ...

  3. 聊一聊顺序消息(RocketMQ顺序消息的实现机制)

    当我们说顺序时,我们在说什么? 日常思维中,顺序大部分情况会和时间关联起来,即时间的先后表示事件的顺序关系. 比如事件A发生在下午3点一刻,而事件B发生在下午4点,那么我们认为事件A发生在事件B之前, ...

  4. instrument(2)

    学习了instrument之后试着自己写点东西,上一篇的例子中使用的是asm,毕竟是面向字节码的,api还是比较复杂的.其实有时候的需求很简单,无非就是看下类里的方法啊之类的.javassist是基于 ...

  5. BZOJ_3942_[Usaco2015 Feb]Censoring_KMP

    BZOJ_3942_[Usaco2015 Feb]Censoring_KMP Description 有一个S串和一个T串,长度均小于1,000,000,设当前串为U串,然后从前往后枚举S串一个字符一 ...

  6. 正则表达式(Regular expressions)使用笔记

    Regular expressions are a powerful language for matching text patterns. This page gives a basic intr ...

  7. Jmeter----A接口response中body的某一个参数传递给B接口request的body中使用(参数的传递)

    示例:将接口"获取待办列表"response中body的id值传递给接口"删除待办"request的body中使用: 操作步骤如下: 第一步:给"获取 ...

  8. TiDB show processlist命令源码分析

    背景 因为丰巢自去年年底开始在推送平台上尝试了TiDB,最近又要将承接丰巢所有交易的支付平台切到TiDB上.我本人一直没有抽出时间对TiDB的源码进行学习,最近准备开始一系列的学习和分享.由于我本人没 ...

  9. 浅析JavaScript解析赋值、浅拷贝和深拷贝的区别

    文章首发于sau交流学习社区 一.赋值(Copy) 赋值是将某一数值或对象赋给某个变量的过程,分为: 1.基本数据类型:赋值,赋值之后两个变量互不影响 2.引用数据类型:赋**址**,两个变量具有相同 ...

  10. JAVA基础第五章-集合框架Map篇

    业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...