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

   在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. 乘风破浪:LeetCode真题_018_4Sum

    乘风破浪:LeetCode真题_018_4Sum 一.前言 前面我们已经练习过了三个数相加的集合运算,现在变成了四个数,其实道理是一样的.三个数的时候可以转成两个数的加法,最后来解决,而四个数的可以转 ...

  2. August 25th 2017 Week 34th Friday

    Stop to have a rest, do not forget others still in the running. 停下来休息的时候,不要忘记别人还在奔跑. You don't need ...

  3. ZT 线程处理函数pthread_cleanup_push / pthread_cleanup_pop

    http://bbs.csdn.net/topics/390688105 2)创建了线程,但是线程退出时没有线程调用pthread_join() 线程资源没有回收,如果持续创建线程,到一定数量后将不能 ...

  4. npm 使用国内镜像的方法

    npm全称Node Package Manager,是node.js的模块依赖管理工具.由于npm的源在国外,所以国内用户使用起来各种不方便.我们通过设置使用淘宝的镜像来加快我们的速度. 临时使用 n ...

  5. Linux下中间人攻击利用框架bettercap测试

    0x01简介 bettercap可用来实现各种中间人攻击,模块化,便携.易扩展 0x02特点 提到中间人攻击,最知名的莫过于ettercap,而开发bettercap的目的不是为了追赶它,而是替代它 ...

  6. 二值形态学——腐蚀与膨胀 及 C语言代码实现

    参考文献:数字图像处理(第三版) 何东健 西安电子科技大学出版社 二值形态学中的运算对象是集合, 但实际运算中, 当涉及两个集合时并不把它们看作是互相对等的. 一般设A为图像集合, S为结构元素, 数 ...

  7. How Flask Routing Works

    @How Flask Routing Works The entire idea of Flask (and the underlying Werkzeug library) is to map UR ...

  8. Sublime Text 3中文乱码问题解决

    Sublime Text 3是我MacBook Pro最喜欢的代码编辑器,没有之一,因为她的性感高亮代码配色,更因为它的小巧,但是它默认不支持GBK的编码格式,因此打开GBK的代码文件,如果里面有中文 ...

  9. [19/04/23-星期二] GOF23_创建型模式(工厂模式、抽象工厂模式)

    一.工厂模式(分为:简单工厂模式.工厂方法模式.抽象工厂模式) 实现了创建者和调用者的分离 核心本质:1.实例化对象,用工厂方法代替new操作:2.将选择实现类.创建对象统一管理和控制,从而将调用者跟 ...

  10. 7、Web Service-IDEA-jaxws规范下的 服务端/客户端 开发

    前提简介:这里之后即使基于IDEA进行开发的,风格与之前有些不同之处! 1.服务端的开发 1.创建新的项目 2.pom.xml 添加开发时所需要的依赖 <?xml version="1 ...