---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
一直都想在博客中记录自己学习的点点滴滴,但是每当开始书写的时候,就不知道从何写起(亲们,你们有类似的感觉吗?);其实Java的枚举就相当于这样的一个Java普通类,构造方法私有化,提供几个本类的静态的实例对象。
枚举的常用方法:
package com.itheima.enumstudy;
import java.util.HashMap;
import java.util.Map;
/**
* 枚举类型的基本使用
*/
public class EnumDemo {
public static void main(String[] args) {
System.out.println(MyEnum.SUN.nextDay());
System.out.println(MyEnum1.SUN.nextDay());
}
}
/**
* 定义自己的枚举类型
* 星期枚举,获取下一天是星期几
*/
enum MyEnum{
SUN(0),MON(1),TUE(2),WED(3),THU(4),FRI(5),SAT(6);
private int dayNum;
private static Map<Integer,MyEnum> map = new HashMap<Integer,MyEnum>();
private MyEnum(int dayNum){
this.dayNum = dayNum;
}
static{
for(MyEnum en : MyEnum.values()){
map.put(en.dayNum, en);
}
}
public MyEnum nextDay(){
int nextDayNum = (this.dayNum+1)%7;
return map.get(nextDayNum);
}
}
//两种方式,不知道那种方式更好呢?
enum MyEnum1{
SUN{
@Override
public MyEnum1 nextDay() {
return MON;
}
},
MON{
@Override
public MyEnum1 nextDay() {
return TUE;
}
},
TUE{
@Override
public MyEnum1 nextDay() {
return WED;
}
},
WED{
@Override
public MyEnum1 nextDay() {
return THU;
}
},
THU{
@Override
public MyEnum1 nextDay() {
return FRI;
}
},
FRI{
@Override
public MyEnum1 nextDay() {
return SAT;
}
},
SAT{
@Override
public MyEnum1 nextDay() {
return SUN;
}
};
private MyEnum1(){}
//带有抽象方法的枚举
public abstract MyEnum1 nextDay();
}
上述两种方式都能实现获取给定星期几的下一天,但是不知道哪种方式是更好的,就我个人而言,比较喜欢第一种方式,因为代码短。。因为对于Java枚举的理解不是太深,所以先看下枚举的values()方法的底层实现,但是很遗憾,在代码中没能看到values()方法,经过查询资料好像是说values()方法是编译器自动添加的方法(你怎么看?)。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------