关于enum,其实就是简化了的class,功能就是提供一个个独立的、特定含义的常量!

在JDK5.0之前我们想模拟enum的功能,只能使用自定义类的形式:

1.首先私有化构造方法,让外部不能new对象。

2.在类内部new多个final的成员变量,让每个成员变量代表特殊含义(可以私有一个带参数的构造方法,提供一个私有属性,对外提供一个get方法)。

如下:

class Score {
private String s;
private Score(String s) {
this.s = s;
} // 私有化构造方法,不能让用户随意构造对象,固定了四个等级 public String getS() {
return s;
}
public static final Score A = new Score("100-90");
public static final Score B = new Score("89-80");
public static final Score C = new Score("79-70");
public static final Score D = new Score("69-60");
public static final Score E = new Score("59-0");
@Override
public String toString() {
return "" + s + "";
} }

在JDK5.0之后,enum的的出现,更加的灵活:

这里的A、B、C... 对应上面理解就比较容易了!

enum Score {
A("100-90"), B("89-80"), C("79-70"), D("69-60"), E("59-0");
private String s; // 分数段
private Score(String s) {
this.s = s;
}
public String getS() {
return s;
}
// enum不能重写toString
}

同时,enum提供一个values方法,可以同时获得所有的属性!

package b_enum;
/**
* 发现一个有意思的事情,在所有花括号后面加分号都不会报错!
* 发现其实是可以加分号的,但是我们习惯省略了,因为花括号就已经是一个整体;
* 是一段独立的内容了!
* 所以一般我们省略分号,并不会这样去写:main() {}; class Test{};
* @author mzy
*/
public class Demo01 {
/*
* 打印成绩:要求成绩等级 A B C D E
* 只能是这个范围内的,不能有这五个等级之外的字母
* JDK5之前我们只能通过自定义类的形式:私有化构造来实现
*/
public static void main(String[] args) {
// System.out.println(Score.A.getS());
// System.out.println(Score.B.getS());
Score[] values = Score.values();
for(Score score : values) {
System.out.println(score);
}
}
}

mzy对于枚举的理解的更多相关文章

  1. Java枚举类型理解

    Enum格式理解 Enum的格式可以看做跟class关键字一样 class的定义格式如下: public class abc{ } enum的定义格式如下: Public enum abc { } 引 ...

  2. C#编程利器之二:结构与枚举(Structure and enumeration)【转】

    C#编程利器之二:结构与枚举(Structure and enumeration) 在上一篇文章中,介绍了类如何封装程序中的对象.而实际中,出了类可以封装对象外,结构和枚举也可以封装一些对象,本文将着 ...

  3. USB描述符解析-->枚举.

    枚举可以理解为主机按不定的顺序向USB设备讨要设备信息,好给它分配资源,若枚举不成功,就放弃分配资源,免得浪费资源.一般都是使用中断传输方式通信. 常用的描述符有以下几种:01H.设备描述符  02H ...

  4. USB学习小记-HID类键盘的报告描述符的理解

    前言 断断续续的学习了将近三个月,才把USB的HID类搞明白,速度真是够慢的.利用晚上+周末的时间学习自己的东西确实是必要的,不过效率是有点低,以后要更专注一些才行,希望自己能做到吧. 在学习过程中, ...

  5. iOS枚举的运用

    1.什么是枚举? 枚举其实就是一个整型常数的集合,最简单的例子就是表示星期的SUN, MON, TUE, WED, THU, FRI,SAT, 就是一个枚举. 2.iOS中枚举的使用 在ObjC中可以 ...

  6. 【Java提高】---枚举的应用

    枚举 一.枚举和静态常量区别                 讲到枚举我们首先思考,它和public static final String 修饰的常量有什么不同. 我举枚举的两个优点: 1. 保证了 ...

  7. Java开发知识之Java的枚举

    Java开发知识之Java的枚举 一丶什么是枚举 枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C++中都是用const关键字. 枚举跟C++概念都是一样的.就是特定的常 ...

  8. 浅谈 Java 中的枚举

    枚举也就是一一列举,常用来表示那些可以明确范围的集合,比方说性别,季节,星期,月份等. 在 JDK 1.5 才出现枚举类,在没有出现枚举类之前,我们要表示几个确定的值通常会使用常量来表示,形如 pub ...

  9. JDK源码学习笔记——Enum枚举使用及原理

    一.为什么使用枚举 什么时候应该使用枚举呢?每当需要一组固定的常量的时候,如一周的天数.一年四季等.或者是在我们编译前就知道其包含的所有值的集合. 利用 public final static 完全可 ...

随机推荐

  1. 两万字Vue.js基础学习笔记

    Vue.js学习笔记 目录 Vue.js学习笔记 ES6语法 1.不一样的变量声明:const和let 2.模板字符串 3.箭头函数(Arrow Functions) 4. 函数的参数默认值 5.Sp ...

  2. Leetcode:面试题28. 对称的二叉树

    Leetcode:面试题28. 对称的二叉树 Leetcode:面试题28. 对称的二叉树 Talk is cheap . Show me the code . /** * Definition fo ...

  3. 《PHP 实现 Base64 编码/解码》笔记

    前言 早在去年 11 月底就已经看过<PHP 实现 Base64 编码/解码>这篇文章了,由于当时所掌握的位运算知识过于薄弱,所以就算是看过几遍也是囫囵吞枣一般,不出几日便忘记了其滋味. ...

  4. 第五篇--Chorme浏览器主页被篡改

    解决方法:关闭谷歌浏览器,右击桌面快捷方式,查看属性,然后将target后面的网址删掉.并且任务栏的google打开方式,最好也把流氓网址删掉.之后就正常了.

  5. infomation_schema基本使用

    一.infomation_schema库 把 information_schema 看作是一个数据库,确切说是信息数据库.其中保存着关于MySQL服务器所维护的所有其他数据库的信息.如数据库名,数据库 ...

  6. elastic query match_all 数据目标超过10000条出错 Result window is too large

    起因 elastic做文本索引,match_all目标索引超过10000条时,出错 { "error": { "root_cause": [ { "t ...

  7. Orchestrator+Proxysql 实现自动导换+应用透明读写分离

    前面一篇博客我介绍了如何通过Orachestrator+脚本实现自动导换. 这一章,我来演示一下如何通过Orchestrator+Proxysql 实现自动导换+应用透明读写分离 总体架构 可选架构1 ...

  8. 使用hsdis-amd64.dll打印java的汇编文件

    文件放在D:\DeveSOFTWARE\jdk1.8.0_45\jre\bin目录下 hsdis-amd64.dll 下载路径:https://github.com/atzhangsan/file_l ...

  9. document.all("div).style.display = "none"与 等于""的区别

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. java类与对象基础篇

    java面向对象基础篇 面向对象程序设计(Object Oriented Proframming ,OOP) 面向对象的本质是:以类的方式组织代码,以对象的方式组织(封装)数据. 面向对象的核心思想是 ...