----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
1、Enum枚举。
Enum,叫枚举类型。常常用来定义方向、星期等。因为方向一般只有八个值,星期只有七个。如果不用Enum,一般会用数组来表示,那么数组中的各个值的顺序是什么,就不好确定了。你是这样一个顺序,他是那样一个顺序,顺序不一样,相互调用还出错,所以使用Enum,把这些值定义为一个新的类型,如WeekDay{Sun,Mon,Tue,Wed,Thu,Fri,Sat};这样WeekDay只能取定义好的七个值,没有其他值可取,也不用取序列号,直接用其值即可。
2、枚举的方法。
int ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
String name() 返回枚举常量的名称
static <T extends Enum<T>> T valueOf(String name) 返回此字符串表示的枚举常量
用普通类要模拟实现枚举
- public class EnumDemo {
- //主函数,用来使用EnumWeek实现的方法。
- public static void main(String[] args) {
- <span style="white-space:pre"> </span> EnumWeek weekDay1 = EnumWeek.Sun;
- <span style="white-space:pre"> </span>EnumWeek weekDay2 = EnumWeek.Fri;
- <span style="white-space:pre"> </span>while(!weekDay1.equals(weekDay2)){
- <span style="white-space:pre"> </span> System.out.println(weekDay1.toString()+":"+weekDay1.ordinal(weekDay1)
- <span style="white-space:pre"> </span> + " != "+weekDay2.toString()+":"+weekDay2.ordinal);
- <span style="white-space:pre"> </span> weekDay1 = weekDay1.nextDay();
- }
- System.out.println("=========================");
- System.out.println(weekDay1.toString()+":"+weekDay1.ordinal(weekDay1)
- + " != "+weekDay2.toString()+":"+weekDay2.ordinal);
- }
- }
- //这里模拟实现Enum定义实现WeekDay。
- abstract class EnumWeek {
- //属性:名字和次序号。
- String name;
- int ordinal;
- //匿名内部类实现对象的实例化,并在内部实现nextDay方法,引出匿名内部类知识。
- //关于匿名内部类的只是补充:匿名内部类,也是一个类,也是new出一个对象,类中实现的方法,在new的时候不会执行,在用new出的对象调用
- //该方法时,才会执行。
- public static final EnumWeek Sun = new EnumWeek("Sun",0){
- public EnumWeek nextDay() {
- return Mon;
- }
- };
- public static final EnumWeek Mon = new EnumWeek("Mon",1){
- public EnumWeek nextDay() {
- return Tue;
- }
- };
- public static final EnumWeek Tue = new EnumWeek("Tue",2){
- public EnumWeek nextDay() {
- return Wed;
- }
- };
- public static final EnumWeek Wed = new EnumWeek("Wed",3){
- public EnumWeek nextDay() {
- return Thu;
- }
- };
- public static final EnumWeek Thu = new EnumWeek("Thu",4){
- public EnumWeek nextDay() {
- return Fri;
- }
- };
- public static final EnumWeek Fri = new EnumWeek("Fri",5){
- public EnumWeek nextDay() {
- return Sat;
- }
- };
- public static final EnumWeek Sat = new EnumWeek("Sat",6){
- public EnumWeek nextDay() {
- return Sun;
- }
- };
- //构造方法。
- private EnumWeek(String name, int ordinal){
- this.name = name;
- this.ordinal = ordinal;
- };
- //比较器方法。
- public int compareTo(EnumWeek e){
- if(this.ordinal > e.ordinal){
- return 1;
- }else if(this.ordinal == e.ordinal){
- return 0;
- }else{
- return -1;
- }
- }
- //判断是否相等的方法,其中用到了比较器方法。
- public boolean equals(EnumWeek e){
- if(compareTo(e) == 0){
- return true;
- }
- return false;
- }
- //获取序号的方法。
- public int ordinal(EnumWeek e){
- return e.ordinal;
- }
- //打印时获取的字符串方法。
- public String toString(){
- return this.name;
- }
- //内部抽象方法,没有方法体。抽象方法只会出现在抽象类中,而抽象类是无法实例化的,这里能实例化,是因为实例的是其子类,而其//子类继承了抽象类,就一定要实现其抽象方法,这里的抽象方法就是nextday。
- public abstract EnumWeek nextDay();
- }