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

   在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. 月报 提取/保存 到OneDrive. 并发送反馈邮件

  2. Android 通过触摸动态地在屏幕上画矩形

    需求概述: 在屏幕上用手指画出一个区域,返回所圈的区域坐标. 技术实现: 自定义View,设置画笔及对应参数,在onTouchEvent()回调函数里,对触摸事件进行判断.画出矩形图形. 代码: 自定 ...

  3. [EffectiveC++]item41:了解隐式接口和编译器多态

    classes和templates都支持接口和多态,interfaces and polymorphism 对classes而言接口是显示的explicit,以函数签名为中心.多态则是通过virtua ...

  4. 如何用iOS工程生成iOS模拟器包

    1. 在终端上运行下面的命令来查找你的机器上可用的SDK的版本 xcodebuild -showsdks 2. 创建模拟器包: xcodebuild -workspace ** -scheme ** ...

  5. css属性之flex属性

    flex属性 规定了弹性元素如何伸长或缩短以适应flex容器中的可用空间.是一个简写属性,可以同时设置flex-grow, flex-shrink, flex-basis三个子属性. /* Basic ...

  6. hdu-3333 Turing Tree 离线区间+树状数组(区间不同数的和)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3333 题目大意: 给出一数组,以及m个查询区间,每次查询该区间不同数字的和.相同数字只加一次. 解题 ...

  7. 死磕salt系列-salt grains pillar 配置

    grains 和 pillar 对比: Grains:存放静态数据,主要存储客户端的主机信息,重启grains会刷新. Pillar: 处理敏感数据, 处理差异性的文件. Grains数据系统 sal ...

  8. ZOJ1081 Points Within

    嘟嘟嘟 题面:给一个\(n\)个点的多边形和\(m\)个点,判断每一个点是否在多边形内. 解法:射线法. 就是从这个点引一条射线,如果与多边形有奇数个交点,则在多边形内部. 那么只用枚举每一条边,然后 ...

  9. C语言文件操作总结

    文件的打开操作 fopen 打开一个文件,操作文件指针FILE * 文件的关闭操作 fclose 关闭一个文件 文件的读写操作 fgetc 从文件中读取一个字符 fputc 写一个字符到文件中去 fg ...

  10. VC++获取一个GB级大文件的字节大小

    常规的获得小文件(2.1GB以下)的字节大小可以使用ftell,函数 ftell 用于得到文件位置指针当前位置相对于文件首的偏移字节数.使用fseek函数后再调用函数ftell()就能非常容易地确定文 ...