【java基础回顾一】——枚举

来源:互联网 发布:屠龙战记转生修为数据 编辑:程序博客网 时间:2024/06/13 22:41

java枚举

前言这段时间正好忙完了前面的项目可以静下心来回顾一下java的基础知识,然后想把脑子里学习的东西整理一下,感觉太乱了有点,于是决定写一下博客分享下学习成果,还想录下视频供大家参考,一来检验下学习成果,二来也为大家提供更好的学习途径,三也为了证明我前面说过的一个道理:东西是不是学到了,要看你能不能很好的讲出来。

一、写在前面的话

如何学习一个新的东西:

要点】把握两点:

1、存在的价值在哪里?

2、如何发挥它应有的价值?

这两点搞清楚了,这个东西就搞清楚了

二、java枚举的价值在哪里?

       从JDK1.5之后,java语言引进了枚举这个概念,既然引进这个概念肯定说明这个概念有其存在的价值的,那么价值在哪里?

       那么这里先要简单的介绍下JDK1.5之前,当我们处理一种类型的变量,要求其变量的取值只能为某几个固定的值的时候,比如说:季节这个变量,它的取值肯定只有4个,即“春、夏、秋、东”再没有别的了,这个时候我们采取的办法,一般是定义一个季节类:如下:

//季节类public class Season {public static final Season SPRING = new Season();public static final Season SUMMER = new Season();public static final Season AUTUMN = new Season();public static final Season WINTER = new Season();public Season(){}}


这样当我们在使用它的时候就能控制其变量的取值了:

但是我们发现如果当一个类型的变量有很多种固定取值的时候,那么这么写就会很麻烦,枚举的出现就解决了这个问题,这就是其存在的意义,就是为了让这一切变得更便捷,其实没有枚举也完全可以进行各种开发,只是相对来说会麻烦一些。

三、如何发挥java 枚举应有的价值?

3.1、基本用法:

enum很像特殊的class,实际上enum声明定义的类型就是一个类。而这些类都是类库中Enum类的子类(java.lang.Enum<E>)。它们继承了这个Enum中的许多有用的方法

/** * 季节枚举 * @author bin * */public enum SeasonEnum {SPRING,SUMMER,AUTUMN,WINTER;}
】枚举是一种特殊的类,其构造方法默认是private类型的,当然我们可以覆盖这个默认的空参构造方法,但是也必须是private类型的才行。


SeasonEnum这个枚举非常特殊的类,其中的四个枚举值都是SeasonEnum类的对象:

public class Demo1 {public static void main(String[] args) {SeasonEnum se = SeasonEnum.SPRING;}}
而且这些枚举值都是public static final的,也就是我们经常所定义的常量方式,因此枚举类中的枚举值最好全部大写,当然用小写也没有什么问题,只是有些不走寻常路罢了。

那么既然这些枚举值都是枚举类的类实例,那么肯定可以对这些类实例进行更复杂的操作:

public enum SeasonEnum {SPRING("春天"),SUMMER("夏天"),AUTUMN("秋天"),WINTER("冬天");/** * 对季节的描述信息 */private String desc;public String getDesc() {return desc;}private SeasonEnum(String desc){this.desc = desc;}}

3.2、常见用法

(1)用在switch中:

enum Signal {GREEN, YELLOW, RED}public class TrafficLight {Signal color = Signal.RED;public void change() {switch (color) {case RED:color = Signal.GREEN;break;case YELLOW:color = Signal.RED;break;case GREEN:color = Signal.YELLOW;break;}}}
注意】在switch中应用枚举,case语句是不加引号的。

(2)在枚举中添加新方法:

public enum Color {RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);// 成员变量private String name;private int index;// 构造方法private Color(String name, int index) {this.name = name;this.index = index;}// 普通方法public static String getName(int index) {for (Color c : Color.values()) {if (c.getIndex() == index) {return c.name;}}return null;}// get set 方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getIndex() {return index;}public void setIndex(int index) {this.index = index;}}

(3)覆盖枚举方法

public enum Color {RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);// 成员变量private String name;private int index;// 构造方法private Color(String name, int index) {this.name = name;this.index = index;}//覆盖方法@Overridepublic String toString() {return this.index+"_"+this.name;}}

(4)实现接口

public interface Behaviour {void print();String getInfo();}public enum Color implements Behaviour{RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);// 成员变量private String name;private int index;// 构造方法private Color(String name, int index) {this.name = name;this.index = index;}//接口方法@Overridepublic String getInfo() {return this.name;}//接口方法@Overridepublic void print() {System.out.println(this.index+":"+this.name);}}

(5)使用接口来组织枚举

public interface Food {enum Coffee implements Food{BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO}enum Dessert implements Food{FRUIT, CAKE, GELATO}}



0 0
原创粉丝点击