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

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中子组件的created、mounted钩子中获取不到props中的值问题

    父子组件通信 这个官网很清楚,也很简单,父组件中使用v-bind绑定传送,子组件使用props接收即可 例如: 父组件中: <template> <div> <head- ...

  2. Nginx Too many open files

    2019/07/25 08:31:31 [crit] 15929#15929: accept4() failed (24: Too many open files) 2019/07/25 08:31: ...

  3. Django入门第一步:构建一个简单的Django项目

    Django入门第一步:构建一个简单的Django项目 1.简介 Django是一个功能完备的Python Web框架,可用于构建复杂的Web应用程序.在本文中,将通过示例跳入并学习Django.您将 ...

  4. oracle学习笔记:字符串替换 replace、regexp_replace、translate函数

    1.replace 函数 语法:replace(char, search_string, replacement_string) --针对字符串替换 功能: ​ 将char中的字符串替换. ​ 当re ...

  5. C++ sizeof(struct) 的注意

    今天在测试将C++代码导出的NavMesh二进制文件用一套C#改写的代码导入时,发现导入的数据出现不一致的问题. 分别在C++和C#AddTile的函数内设置断点,观察最后得到的tile有大部分的字段 ...

  6. 使用nodejs连接mysql数据库实现增删改查

      首先要有数据库 使用xampp 或者 phpstudy 可以傻瓜式安装 新建一个项目文件夹 之后在这个目录下初始化package.json (npm init) 先在项目中安装mysql 和 ex ...

  7. el-table表格错误问题

    .el-table--border th.gutter:last-of-type { display: block!important; width: 17px!important; } 如果不行,则 ...

  8. iOS分类(category),类扩展(extension)—史上最全攻略

    背景: 在大型项目,企业级开发中多人同时维护同一个类,此时程序员A因为某项需求只想给当前类currentClass添加一个方法newMethod,那该怎么办呢? 最简单粗暴的方式是把newMethod ...

  9. PHP基础——语法篇

    <!-- 语句:通过 PHP,有两种在浏览器输出文本的基础指令:echo 和 print. --> <?php echo "Hello World!"; //PH ...

  10. storm连接http需要的jar包

    将httpclient-4.5.6.jar  httpcore-4.4.10.jar这两个jar包拷贝到storm安装目录下的lib目录下 如果是集群的话,需要拷贝到集群中的每台机器上