Java基础——枚举
一、使用枚举类之前是如何实现枚举的
在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基础——枚举的更多相关文章
- Java基础—枚举
定义 枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示. 为什么要用枚举 在java语言中还没有引入枚举类型之前,表示枚 ...
- Java基础——枚举详解
前言: 在第一次学习面向对象编程时,我记得最深的一句话就是“万物皆对象”.于是我一直秉承着这个思想努力的学习着JAVA,直到学习到枚举(Enum)时,看着它颇为奇怪的语法……我一直在想,这TM是个什么 ...
- Java基础--枚举
1.枚举简介 枚举是由一组固定的常量组成的类型,自定义数据类型. 枚举的常量值一定是可列举的有限值.常量值的类型都是public static final. 下面代码中的Gender 是一种自定义的数 ...
- Java基础--枚举Enum
Java中的枚举是一种特殊的类,可以将一组固定常量的集合组成一种类型,使用方便且类型安全.使用enum关键字定义. enum类型父类为Enum,通过Enum.class可见Enum为抽象类,实现了Co ...
- java基础---枚举类与注解
一.枚举类 类的对象只有有限个,确定的.我们称此类为枚举类 如果枚举类中只有一个对象,则可以作为单例模式的实现方式. 定义枚举类 方式一:jdk5.0之前,自定义枚举类 public class Se ...
- java基础-02数据类型
基本类型 整数 byte byte 数据类型是8位.有符号的,以二进制补码表示的整数 最小值是 -128(-2^7) 最大值是 127(2^7-1) 默认值是 0 byte 类型用在大型数组中节约空间 ...
- 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错
原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...
- 黑马程序员:Java基础总结----枚举
黑马程序员:Java基础总结 枚举 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 枚举 为什么要有枚举 问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别 ...
- 夯实Java基础系列14:深入理解Java枚举类
目录 初探枚举类 枚举类-语法 枚举类的具体使用 使用枚举类的注意事项 枚举类的实现原理 枚举类实战 实战一无参 实战二有一参 实战三有两参 枚举类总结 枚举 API 总结 参考文章 微信公众号 Ja ...
随机推荐
- July 28th 2017 Week 30th Friday
If equal affection cannot be, let the more loving be me. 如果没有相等的爱,那就让我爱多一点吧. There is seldom equal a ...
- 并发集合 System.Collections.Concurrent 命名空间
System.Collections.Concurrent 命名空间提供多个线程安全集合类. 当有多个线程并发访问集合时,应使用这些类代替 System.Collections 和 System.Co ...
- [转]solr系统query检索词特殊字符的处理
原文地址:http://blog.csdn.net/wgw335363240/article/details/39889979 solr是基于 lucence开发的应用,如果query中带有非法字符串 ...
- Java特性之继承的应用
继承是为了复用,复用是为了减少冗余的代码,提高开发效率. 这次我讲继承,仅仅只是讲它在我开发中一个小小的应用,就是关于Controller日志打印.我们通常使用日志,要么是使用slf或者是log4j. ...
- Elasticsearch + Elasticsearch-head搭建
Elasticsearch搭建: [root@hdoop3 elk]# tar -xvf elasticsearch-6.2.4.tar [root@hdoop3 elk]# cd elasticse ...
- Luogu_3239 [HNOI2015]亚瑟王
Luogu_3239 [HNOI2015]亚瑟王 vim-markdown 真好用 这个题难了我一下午 第一道概率正而八经\(DP\),还是通过qbxt讲解才会做的. 发现Sengxian真是个dal ...
- 什么是工厂函数?Python 中工厂函数怎么理解?(转)
所谓工厂函数就是指这些内建函数都是类对象(实际上是类), 当你调用它们时,实际上是创建了一个类实例. type():查看类型
- HTML5手机端拍照上传
1.accept="image/*" capture="camera" 自动调用手机端拍照功能 accept="image/*" captu ...
- koa2学习笔记01 - 创建项目 —— koa生成器一键生成koa项目
前言 从17年开始尝试学习搭建个人网站开始,就开始学习摸索node了,至今差不多快两年了. 说起来现在都9102年了,所以最近打算整体设计重构一下网站,索性node后台也重写一遍. 重温一下node, ...
- GBK 文件在 sublime 保存时被强制保存为 utf-8 导致中文乱码, 恢复。
原来在 CoverteToUTF8 的 README.zh_CN.md 文件里就有解决方法,如下: * 问:我的文件被保存为 UTF-8,而且变成了乱码,要如何恢复? 答:请打开这个文件,并确认它的编 ...