浅谈枚举
---------------------- android
培训、java培训、期待与您交流! ----------------------
1.枚举:
枚举就是让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错,枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标
2.基本的枚举特性
protected Object clone() 抛出 CloneNotSupportedException。
int compareTo(E o) 比较此枚举与指定对象的顺序。
boolean equals(Object other) 当指定对象等于此枚举常量时,返回 true。
protected void finalize() 枚举类不能有 finalize 方法。
Class<E> getDeclaringClass() 返回与此枚举常量的枚举类型相对应的 Class 对象。
int
hashCode() 返回枚举常量的哈希码。
String name() 返回此枚举常量的名称,在其枚举声明中对其进行声明。
int ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
String toString() 返回枚举常量的名称,它包含在声明中。
static <T extends Enum<T>> T
valueOf(Class<T> enumType, String name) 返回带指定名称的指定枚举类型的枚举常量。
-----------------------------------------------
enum WeekDay
{
SUN,MON,TUES;
}
class EnumDemo
{
public static void main(String[] args)
{
for(WeekDay wd : WeekDay.values())
{
System.out.println();
System.out.println(wd + " 与MON的顺序: " + wd.compareTo(WeekDay.MON));
System.out.println(wd + " 与MON是否相等: " + wd.equals(WeekDay.MON));
System.out.println(wd + " 相对应的 Class 对象: " + wd.getDeclaringClass());
System.out.println(wd + " 的hasCode: " + wd.hashCode());
System.out.println(wd + " 的名称" + wd.name());
System.out.println(wd + " 在枚举中的位置" + wd.ordinal());
System.out.println("返回带指定名称的指定枚举类型的枚举常量: " +
Enum.valueOf(WeekDay.class,"MON"));
System.out.println("--------------------------");
System.out.println("--------------------------");
}
}
}
----------------------------------------------------
/*结果
SUN 与MON的顺序: -1
SUN 与MON是否相等: false
SUN 相对应的 Class 对象: class WeekDay
SUN 的hasCode: 1414159026
SUN 的名称SUN
SUN 在枚举中的位置0
返回带指定名称的指定枚举类型的枚举常量: MON
--------------------------
--------------------------
MON 与MON的顺序: 0
MON 与MON是否相等: true
MON 相对应的 Class 对象: class WeekDay
MON 的hasCode: 1794515827
MON 的名称MON
MON 在枚举中的位置1
返回带指定名称的指定枚举类型的枚举常量: MON
--------------------------
--------------------------
TUES 与MON的顺序: 1
TUES 与MON是否相等: false
TUES 相对应的 Class 对象: class WeekDay
TUES 的hasCode: 1167165921
TUES 的名称TUES
TUES 在枚举中的位置2
返回带指定名称的指定枚举类型的枚举常量: MON
--------------------------
--------------------------
*/
---------------------------------
3.在ENUM中添加方法
一般来说,我们希望每个枚举实例能够返回自身的描述,而不是仅仅只是默认的toString(),
因此我们添加一个方法,返回描述的值
---------------------------------
class SexDemo
{
public static void main(String[] args)
{
for(Sex s : Sex.values())
{
System.out.println(s.getSex());
}
}
}
enum Sex
{
BOY("男"),GIRL("女");
String sexName;
private Sex(String sexName){this.sexName = sexName;}
public String getSex(){return sexName;}
}
/*结果:
男
女
*/
-----------------------------------
4.switch语句中的enum
在switch中使用enum,是enum提供的一项非常便利的功能,因为通过ordinal()方法可以取得其次序,
因此我们可以在switch语句中使用enum。
-----------------------------------
class TrafficLight
{
Signal color = Signal.RED;
public void change()
{
switch(color)
{
case RED: color = Signal.GREEN;
break;
case GREEN: color = Signal.YELLOW;
break;
case YELLOW: color = Signal.RED;
break;
}
}
public static void main(String[] args)
{
TrafficLight t = new TrafficLight();
for(int i = 0;i < 5;i++)
{
System.out.println(t.color.getLight());
t.change();
}
}
}
enum Signal
{
GREEN("绿"),YELLOW("黄"),RED("红");
private String light;
private Signal(String light){this.light = light;}
public String getLight(){return light;}
}
/*结果
红
绿
黄
红
绿
*/
------------------------------------------
5.在enmu中调用内部类
public class EnumTest {
public static void main(String[] args) {
}
public enum TrafficLamp{
RED(30){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return TrafficLamp.GERRN;
}
},
GERRN(45){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return TrafficLamp.RED;
}
},
YELLOW(5){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return TrafficLamp.YELLOW;
}
};
private int time;
private TrafficLamp(int time) {
this.time = time;
}
public abstract TrafficLamp nextLamp();
}
}
---------------------- android培训、java培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net/heima