您的位置:首页 > 职场人生

黑马程序员_ Java高新技术——深入Java枚举机制

2013-02-11 17:02 260 查看
------- android培训java培训、期待与您交流! ----------
一、枚举作用的介绍

所谓的“枚举”,其实就是让某个类型变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时期就控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

二、用普通类模拟枚举实现的原理

由于在实际的开发中,程序中经常免不了要用到时间问题,为了更好的统一表示“星期几”这个问题,我们可以自定义一个WeekDay类,具体代码如下:

public class EnumTest {

public static void main(String[] args) {

WeekDay weekDay2 = WeekDay.FRI;

System.out.println(weekDay2);

}

public enum WeekDay{

SUN(1),MON(),TUE,WED,THI,FRI,SAT;

private WeekDay(){System.out.println("first");}

private WeekDay(int day){System.out.println("second");}

}

}

三、枚举的基本应用

1、int compareTo(E o)

比较此枚举与指定对象的顺序。

2、boolean equals(Object other)

当指定对象等于此枚举常量时,返回 true。

3、Class<E> getDeclaringClass()

返回与此枚举常量的枚举类型相对应的 Class 对象。

4、int hashCode()

返回枚举常量的哈希码。

5、String name()

返回此枚举常量的名称,在其枚举声明中对其进行声明。

6、int ordinal()

返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

7、String toString()

返回枚举常量的名称,它包含在声明中。

8、static <T extends Enum<T>>

T valueOf(Class<T> enumType, String name)

返回带指定名称的指定枚举类型的枚举常量。

9、示例代码如下:

import java.util.Date;

public class EnumTest {

public static void main(String[] args) {

WeekDay weekDay2 = WeekDay.FRI;

System.out.println(weekDay2);

System.out.println(weekDay2.name());

System.out.println(weekDay2.ordinal());

System.out.println(WeekDay.valueOf("SUN").toString());

System.out.println(WeekDay.values().length);

}

public enum WeekDay{

SUN(1),MON(),TUE,WED,THI,FRI,SAT;

private WeekDay(){System.out.println("first");}

private WeekDay(int day){System.out.println("second");}

}

}

四、实现带有构造方法的枚举

事实上,由于枚举中的每一个成员都是一个对象,由于是对象就可以初始化,所以就要调用构造方法,常见的枚举类型都没有书写构造方法,但那并不代表就没有构造方法,它只是调用了默认的空的构造方法而已。下面我们就书写一下拥有构造方法的枚举:

具体代码如下:

import java.util.Date;

publicclass EnumTest {

publicstaticvoid main(String[] args) {

}

publicenum TrafficLamp{
RED(30),
GREEN(45),
YELLOW(5);

privateinttime;
private TrafficLamp(int time){this.time = time;}
}
}

五、实现带有抽象方法的枚举

既然枚举中的每一个成员都是一个对象,那么当我们定义了一个抽象方法时,它自然也要实现此抽象方法了,下面我们就做演示;

具体代码如下:

import java.util.Date;

publicclass EnumTest {

publicstaticvoid main(String[] args) {

}

publicenum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
returnGREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
returnYELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
returnRED;
}
};
publicabstract TrafficLamp nextLamp();
privateinttime;
private TrafficLamp(int time){this.time = time;}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: