一、使用枚举类之前是如何实现枚举的

   在JDK1.5之前,我们定义常量都是:public static fianl....;定义枚举也可以通过如下的方式:

package com.jiangbei.test.enumtest;

/**
* 颜色枚举类
* 作者: Administrator
* 日期: 2017/9/23
**/
public class Color {
// 1.私有的final属性
private final String name; // 颜色名称
private final String desc; // 颜色描述 // 2.构造器私有化,防止外部创建变量;并通过构造器初始化属性
private Color(String name, String desc){
this.name = name;
this.desc = desc;
} // 3.公有方法获取属性(final不提供setter)
public String getName() {
return name;
} public String getDesc() {
return desc;
} // 4.通过枚举类创建对象
public static final Color RED = new Color("red", "这是红色");
public static final Color GREEN = new Color("green", "这是绿色");
public static final Color BLUE = new Color("blue", "这是蓝色"); // 5.其他普通方法
@Override
public String toString() {
return "Color{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
public void show(){
System.out.println("给你点颜色看看:");
}
}

  可以看到,主要是通过私有化构造器,然后在内部创建对象实现对象可以枚举的(这也是一个普通的类,本质和平时写的类没根本区别)

  测试代码:

public static void main(String[] args) {
Color red = Color.RED;
Color green = Color.GREEN;
red.show();
System.out.println(red);
System.out.println(red.getName());
System.out.println(green);
System.out.println(green.getDesc());
}

  

二、使用JDK5新增的enum定义枚举类

  1.定义一个无属性的Enum 

public enum ColorEnum {
RED,GREEN,BLUE;
}

  // 相当于定义了三个Color的枚举类,它们是经过Enum构造函数来创建的:

  

  3个属性,相当于调用了3次构造方法(也就是我们没有枚举类的时候进行的3次的new的操作)

  之后通过API来了解它的使用:

  

  public static void main(String[] args) {
ColorEnum red = ColorEnum.RED;
System.out.println(red.name());
ColorEnum blue = ColorEnum.BLUE;
System.out.println(blue.ordinal());
}

  

  其他方法例如 valueOf(),以及可以用于switch等不再赘述

  并且,枚举本质也是一个类,他也可以实现接口(但不能继承类,因为已经隐式继承了java.lang.Enum)

  2.自定义属性的Enum

    其实枚举类是不用给setter的,因为基本不会再去设置属性了

package com.jiangbei.test.enumtest;

/**
* 颜色枚举类
*/
public enum ColorEnum {
RED("red", "红色"),GREEN("green", "绿色"),BLUE("blue", "蓝色"); private String name;
private String desc; ColorEnum(String name, String desc){
this.name = name;
this.desc = desc;
}
public static String getDescByName(String name){
for (ColorEnum c : ColorEnum.values()) {
if (c.getName().equalsIgnoreCase(name)) {
return c.getDesc();
}
}
return null;
}
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getDesc() {
return desc;
} public void setDesc(String desc) {
this.desc = desc;
} @Override
public String toString() {
return "ColorEnum{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}

  测试:

   public static void main(String[] args) {
String red = ColorEnum.getDescByName("red");
System.out.println(red);
ColorEnum blue = ColorEnum.BLUE;
System.out.println(blue);
}

  

  其他常见用法可以参见:http://blog.csdn.net/qq_27093465/article/details/52180865

             http://www.cnblogs.com/linjiqin/archive/2011/02/11/1951632.html

Java基础——枚举的更多相关文章

  1. Java基础—枚举

    定义 枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示. 为什么要用枚举 在java语言中还没有引入枚举类型之前,表示枚 ...

  2. Java基础——枚举详解

    前言: 在第一次学习面向对象编程时,我记得最深的一句话就是“万物皆对象”.于是我一直秉承着这个思想努力的学习着JAVA,直到学习到枚举(Enum)时,看着它颇为奇怪的语法……我一直在想,这TM是个什么 ...

  3. Java基础--枚举

    1.枚举简介 枚举是由一组固定的常量组成的类型,自定义数据类型. 枚举的常量值一定是可列举的有限值.常量值的类型都是public static final. 下面代码中的Gender 是一种自定义的数 ...

  4. Java基础--枚举Enum

    Java中的枚举是一种特殊的类,可以将一组固定常量的集合组成一种类型,使用方便且类型安全.使用enum关键字定义. enum类型父类为Enum,通过Enum.class可见Enum为抽象类,实现了Co ...

  5. java基础---枚举类与注解

    一.枚举类 类的对象只有有限个,确定的.我们称此类为枚举类 如果枚举类中只有一个对象,则可以作为单例模式的实现方式. 定义枚举类 方式一:jdk5.0之前,自定义枚举类 public class Se ...

  6. java基础-02数据类型

    基本类型 整数 byte byte 数据类型是8位.有符号的,以二进制补码表示的整数 最小值是 -128(-2^7) 最大值是 127(2^7-1) 默认值是 0 byte 类型用在大型数组中节约空间 ...

  7. 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错

    原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...

  8. 黑马程序员:Java基础总结----枚举

    黑马程序员:Java基础总结 枚举   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 枚举 为什么要有枚举 问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别 ...

  9. 夯实Java基础系列14:深入理解Java枚举类

    目录 初探枚举类 枚举类-语法 枚举类的具体使用 使用枚举类的注意事项 枚举类的实现原理 枚举类实战 实战一无参 实战二有一参 实战三有两参 枚举类总结 枚举 API 总结 参考文章 微信公众号 Ja ...

随机推荐

  1. July 28th 2017 Week 30th Friday

    If equal affection cannot be, let the more loving be me. 如果没有相等的爱,那就让我爱多一点吧. There is seldom equal a ...

  2. 并发集合 System.Collections.Concurrent 命名空间

    System.Collections.Concurrent 命名空间提供多个线程安全集合类. 当有多个线程并发访问集合时,应使用这些类代替 System.Collections 和 System.Co ...

  3. [转]solr系统query检索词特殊字符的处理

    原文地址:http://blog.csdn.net/wgw335363240/article/details/39889979 solr是基于 lucence开发的应用,如果query中带有非法字符串 ...

  4. Java特性之继承的应用

    继承是为了复用,复用是为了减少冗余的代码,提高开发效率. 这次我讲继承,仅仅只是讲它在我开发中一个小小的应用,就是关于Controller日志打印.我们通常使用日志,要么是使用slf或者是log4j. ...

  5. Elasticsearch + Elasticsearch-head搭建

    Elasticsearch搭建: [root@hdoop3 elk]# tar -xvf elasticsearch-6.2.4.tar [root@hdoop3 elk]# cd elasticse ...

  6. Luogu_3239 [HNOI2015]亚瑟王

    Luogu_3239 [HNOI2015]亚瑟王 vim-markdown 真好用 这个题难了我一下午 第一道概率正而八经\(DP\),还是通过qbxt讲解才会做的. 发现Sengxian真是个dal ...

  7. 什么是工厂函数?Python 中工厂函数怎么理解?(转)

    所谓工厂函数就是指这些内建函数都是类对象(实际上是类), 当你调用它们时,实际上是创建了一个类实例. type():查看类型

  8. HTML5手机端拍照上传

    1.accept="image/*" capture="camera" 自动调用手机端拍照功能 accept="image/*" captu ...

  9. koa2学习笔记01 - 创建项目 —— koa生成器一键生成koa项目

    前言 从17年开始尝试学习搭建个人网站开始,就开始学习摸索node了,至今差不多快两年了. 说起来现在都9102年了,所以最近打算整体设计重构一下网站,索性node后台也重写一遍. 重温一下node, ...

  10. GBK 文件在 sublime 保存时被强制保存为 utf-8 导致中文乱码, 恢复。

    原来在 CoverteToUTF8 的 README.zh_CN.md 文件里就有解决方法,如下: * 问:我的文件被保存为 UTF-8,而且变成了乱码,要如何恢复? 答:请打开这个文件,并确认它的编 ...