1 枚举类简介
- 在某些情况下,一个类的对象时有限且固定的,如季节类,它只有春夏秋冬4个对象这种实例有限且固定的类,在 Java 中被称为枚举类;
- 在 Java 中使用 enum 关键字来定义枚举类,其地位与 class、interface 相同;
- 枚举类是一种特殊的类,它和普通的类一样,有自己的成员变量、成员方法、构造器 (只能使用 private 访问修饰符,所以无法从外部调用构造器,构造器只在构造枚举值时被调用);
- 一个 Java 源文件中最多只能有一个 public 类型的枚举类,且该 Java 源文件的名字也必须和该枚举类的类名相同,这点和类是相同的;
- 使用 enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Seriablizable 和 java.lang.Comparable 两个接口;
- 所有的枚举值都是 public static final 的,且非抽象的枚举类不能再派生子类;
- 枚举类的所有实例(枚举值)必须在枚举类的第一行显式地列出,否则这个枚举类将永远不能产生实例。列出这些实例(枚举值)时,系统会自动添加 public static final 修饰,无需程序员显式添加。
2 枚举类的使用
2.1 常量和 switch 语句
在JDK1.5 之前,我们定义常量都是: public static fianl…. 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。
public enum Signal {
GREEN, YELLOW, RED
}
class TrafficLight {
private 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;
}
}
public static void main(String[] args) {
TrafficLight light = new TrafficLight();
System.out.println(light.color);
light.change();
System.out.println(light.color);
light.change();
System.out.println(light.color);
}
}
2.2 向枚举类中添加新方法
如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。
package learnenum;
/**
* Author: HeatDeath
* Date: 2018/2/2
* Desc:
*/
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLOW("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
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;
}
public String getName() {
return name;
}
public int getIndex() {
return index;
}
public static void main(String[] args) {
System.out.println(Color.RED);
System.out.println(Color.RED.getIndex());
System.out.println(Color.RED.getName());
System.out.println(Color.getName(1));
}
}
2.3 覆盖枚举的方法
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
Color(String name, int index) {
this.name = name;
this.index = index;
}
//覆盖方法
@Override
public String toString() {
return this.index + "_" + this.name;
}
public static void main(String[] args) {
System.out.println(Color.RED);
System.out.println(Color.GREEN);
System.out.println(Color.YELLO);
}
}
2.4 实现接口
package learnenum;
/**
* Author: HeatDeath
* Date: 2018/2/2
* Desc:
*/
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;
// 构造方法
Color(String name, int index) {
this.name = name;
this.index = index;
}
//接口方法
public String getInfo() {
return this.name;
}
//接口方法
public void print() {
System.out.println(this.index + ":" + this.name);
}
public static void main(String[] args) {
System.out.println(Color.RED);
System.out.println(Color.RED.getInfo());
Color.RED.print();
}
}
2.5 使用接口组织枚举
2.6 枚举集合的使用
java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的key是enum类型,而value则可以是任意类型。
3 参考资料
1、Java 枚举7常见种用法
http://softbeta.iteye.com/blog/1185573
2、Java 中的枚举 (enum)
https://www.jianshu.com/p/46dbd930f6a2
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
在前后端完全分离的情况下,Vue项目中实现token验证大致思路如下: 1、第一次登录的时候,前端调后端的登陆接口,发送用户名和密码 2、后端收到请求,验证用户名和密码,验证成功,就给前端返回一个token 3、前端拿到token,将token存储到local…