将代码中经常使用的常量,放在枚举中,是一个很好的编码习惯。便于统一修改,同时也增强代码的严谨和稳定性。当然,枚举的应用有很多,这里我只做一个简单的演示,以后看到有趣的使用,会慢慢丰富

package com.my.po;

/**
* description:{description}
* author:jyy
* date:2018-02-07 17:20
* modify:{modify}
*/
public enum Size { SMALL("S", "1"), MEDIUM("M", "2"), LARGE("L", "3"), EXTRA_LARGE("XL", "4"); private String abbreviation;
private String index; Size(String abbreviation, String index) {
this.abbreviation = abbreviation;
this.index = index;
} public String getAbbreviation() {
return abbreviation;
} public String getIndex() {
return index;
}
}

分析:

SMALL("S","1")执行构造函数Size(String abbreviation,String index)

getAbbreviation()方法获取SMALL("S","1")中的S值

getIndex()方法获取SMALL("S","1")中的1值

    @Test
public void test() { //查询SMALL的值
System.out.println(Size.SMALL.toString()); //toString()方法的逆方法valueOf(),s=Size.SMALL
Size s = Enum.valueOf(Size.class, "SMALL");
System.out.println(s.toString()); //获取SMALL中的abbreviation,index
System.out.println(Size.SMALL.getAbbreviation());
System.out.println(Size.SMALL.getIndex());
}

执行结果:

SMALL
SMALL
S
1

这两天无意之间看到一个枚举类TimeUnit,里面的部分代码如下:

public enum TimeUnit {
/**
* Time unit representing one thousandth of a microsecond
*/
NANOSECONDS {
public long toNanos(long d) { return d; }
public long toMicros(long d) { return d/(C1/C0); }
public long toMillis(long d) { return d/(C2/C0); }
public long toSeconds(long d) { return d/(C3/C0); }
public long toMinutes(long d) { return d/(C4/C0); }
public long toHours(long d) { return d/(C5/C0); }
public long toDays(long d) { return d/(C6/C0); }
public long convert(long d, TimeUnit u) { return u.toNanos(d); }
int excessNanos(long d, long m) { return (int)(d - (m*C2)); }
}, 。。。略。。。 public long toNanos(long duration) {
throw new AbstractMethodError();
} /**
* Equivalent to
* {@link #convert(long, TimeUnit) MICROSECONDS.convert(duration, this)}.
* @param duration the duration
* @return the converted duration,
* or {@code Long.MIN_VALUE} if conversion would negatively
* overflow, or {@code Long.MAX_VALUE} if it would positively overflow.
*/
public long toMicros(long duration) {
throw new AbstractMethodError();
} 。。。略。。。
}

最初不是很理解,后来在网上看到一个对枚举原理解释的帖子,顿时豁然开朗,下面我将简单介绍一下。

【举例】

public enum Size {

    SMALL("S","1"){
public String getSize(){
return "小号";
}
public String getRange(){
return "5-10";
}
},
MEDIUM("M","2"){
public String getSize(){
return "中号";
}
public String getRange(){
return "11-20";
}
},
LARGE("L","3"){
public String getSize(){
return "大号";
}
public String getRange(){
return "21-30";
}
}; public abstract String getSize();
public abstract String getRange(); private String abbreviation;
private String index; Size(String abbreviation, String index) {
this.abbreviation = abbreviation;
this.index = index;
} public String getAbbreviation() {
return this.abbreviation;
} public String getIndex() {
return this.index;
}
}
        System.out.println(Size.SMALL.getAbbreviation());
System.out.println(Size.SMALL.getIndex());
System.out.println(Size.SMALL.getSize());
System.out.println(Size.SMALL.getRange());

执行结果:

S
1
小号
5-10

当声明枚举类型Size的时候,其实是声明一个抽象类Size,同时也声明了抽象方法getSize()、getRange()。SMALL、MEDIUM、LARGE都是Size的匿名内部类(由satic final 关键字修饰),并重写了抽象方法。

可以将上面的枚举类Size,改写成以下方式:

public abstract class Size {

    public static final Size SMALL = new Size("S", "1") {
public String getSize() {
return "小号";
} public String getRange() {
return "5-10";
}
};
public static final Size MEDIUM = new Size("M", "2") {
public String getSize() {
return "中号";
} public String getRange() {
return "11-20";
}
};
public static final Size LARGE = new Size("L", "3") {
public String getSize() {
return "大号";
} public String getRange() {
return "21-30";
}
}; public abstract String getSize(); public abstract String getRange(); private String abbreviation;
private String index; Size(String abbreviation, String index) {
this.abbreviation = abbreviation;
this.index = index;
} public String getAbbreviation() {
return this.abbreviation;
} public String getIndex() {
return this.index;
}
}

JAVA基础知识|枚举的更多相关文章

  1. Java 基础知识(一)

    Java基础知识篇: 一.关键字解释 1. final:修饰非抽象类,非抽象方法和属性, 以及修饰方法参数,代表“无法改变的”.出于对设计或者效率的考虑使用该关键字. final类无法被继承,fina ...

  2. 学习Spring必学的Java基础知识(1)----反射(转)

    引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...

  3. 学习Spring必学的Java基础知识(1)----反射

    引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...

  4. Java基础知识回顾之七 ----- 总结篇

    前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...

  5. Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  6. 毕向东—Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  7. java基础知识-笔记整理

    1.查看已安装jdk文件路径 CMD输入java -verbose.   2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...

  8. java基础知识文章汇总

    将之前的所有关于Java基础知识的随笔,整理成质量较高的十几篇随笔,几乎是好几篇比较零散的随笔合成现在的一篇,自认为还不错. java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规 ...

  9. 沉淀,再出发:Java基础知识汇总

    沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...

随机推荐

  1. 前端开发 Vue -0前言

    Vue2.0 新手完全填坑攻略——从环境搭建到发布 Vue2 入门,读这篇就够了 Jinkey原创感谢 showonne.yubang 技术指导Demo 地址:http://demo.jinkey.i ...

  2. C++ DLL debug版本在其他PC上缺少依赖的处理方式

    1.正常情况提供给其他人的都是Release版本DLL 2.在需要提供Debug版本时,目标机器上可能会缺少环境,或者和生成DLL的环境不匹配导致DLL无法加载,提示DLL无法找到. 3.使用DLL依 ...

  3. Css制作table细线表格

    制作细线表格,我想应该是最基本的css知识了,记录下来巩固下. 推荐: table{ border-collapse:collapse; border: 1px solid #000000; } td ...

  4. Ubuntu的apt-get代理设置

    三种方法 -o选项 # sudo apt-get -o Acquire::http::proxy="http://127.0.0.1:8080/" update 配置文件 # vi ...

  5. /Android/sdk/build-tools/21.1.2/aapt'' finished with non-zero exit value 42

    相信很多朋友都会遇到 Error:Error: com.android.ide.common.process.ProcessException: org.gradle.process.internal ...

  6. Redis 学习-Redis Sentinel

    一.启动服务 1. 配置文件 sentinel.conf daemonize yes # 是否守护进程启动 pidfile "/var/run/redis-sentinel-26379.pi ...

  7. Iterator 和 ListIterator 有什么区别?(未完成)

    Iterator 和 ListIterator 有什么区别?(未完成)

  8. JDK源码那些事儿之常用的ArrayList

    前面已经讲解集合中的HashMap并且也对其中使用的红黑树结构做了对应的说明,这次就来看下简单一些的另一个集合类,也是日常经常使用到的ArrayList,整体来说,算是比较好理解的集合了,一起来看下 ...

  9. ubuntu redis 安装 &基本命令

    参考资料:https://www.cnblogs.com/zongfa/p/7808807.htmlredis命令参考:http://doc.redisfans.com/安装:sudo apt-get ...

  10. JSP基础语法总结

    任何语言都有自己的语法,Java中有.JSP虽然是在Java上的一种应用,但是依然有其自己扩充的语法,而且在Jsp中,所有Java语句都可以使用. 一.Jsp的模板元素 Jsp页面中的HTML内容称为 ...