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

黑马程序员----高新技术之 枚举

2014-06-26 11:40 253 查看


----------------- android培训java培训、期待与您交流!-----------------

枚举:
枚举就让某类型的变量的取值只能是若干个固定值中的一个。
枚举是限定有限可能值的一种手段,使用枚举可以降低程序出错的几率,并可以提高代码的可读性与可维护性。
Java中的枚举并不是简单常量的集合,而是一个对象,其本质依然是类,所以Java中的枚举除了提供一系列相关值以外,
还提供了一些额外功能,如定义构造方法、成员变量、普通方法和抽象方法。甚至还可以根据需要自行添加一些功能。

枚举的出现:
例如:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,
但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。这也就促使了枚举的出现。
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。
枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

枚举的定义:
使用关键字Enum定义枚举,里面加入变量。
enum myColor{

Red,

Yellow,

Blue,

}这就是一个简单枚举的定义,在myColor中有3个属性

枚举的使用:
枚举定义完成以后,就可以以“枚举名.枚举项”的形式在代码中对定义的枚举进行使用。在特殊情况下,
如果程序能够识别出当前的枚举类型,则只需要给出枚举项即可,例如在switch语句块中的case关键字后的常量值。
package com.zhy;

//简单的枚举
enum myColor{
Red,
Yellow,
Blue,
}

public class EnumDemo {

public static void main(String[] args) {
//直接使用枚举名.属性就能调用
myColor color = myColor.Red;
checkColor(color);
checkColor(myColor.Blue);
}

public static void checkColor(myColor mColor){
switch (mColor) {
case Red:
System.out.println("is   red");
break;
case Yellow:
System.out.println("is  yellow");
break;
case Blue:
System.out.println("is  blue");
break;
default:
System.out.println("error");
break;
}
}
}


为枚举添加构造器和方法
类拥有构造器,枚举是一种特殊的类,所以枚举也可以拥有自己的构造器。但与普通类的不同之处在于枚举的构造器不可以是public的,
其原因在于该构造器是提供给枚举对象中的枚举项构造时使用的,它并不需要在枚举对象之外使用。
/**
* 性别
* 实现带有构造器的枚举
*/
public enum Gender{
//通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错
//赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错
MAN("MAN"), WOMEN("WOMEN");

private final String value;

//构造器默认也只能是private, 从而保证构造函数只能在内部使用
Gender(String value) {
this.value = value;
}
<span style="white-space:pre">	</span>//添加成员方法--获取性别值
public String getValue() {
return value;
}
}


为枚举添加抽象方法:
enum myColor{  //带有抽象方法的枚举
Red {<span style="white-space:pre">	</span>//需要在每个属性上实现抽象方法
@Override
public String getName() {
return  "is red";
}
},

Yellow {
@Override
public String getName() {
return "is yellow";
}
},

Blue {
@Override
public String getName() {
return "is blue";
}
};
//定义抽象方法
public abstract String getName();
}

public class EnumDemo {

public static void main(String[] args) {
//遍历枚举
for(myColor color : myColor.values()){
<span style="white-space:pre">	</span>System.out.println(color.getName());
<span style="white-space:pre">		</span> }
}
<span style="white-space:pre">	</span>//打印结果是is red   is yellow   is blue
}


总结注意:
1 枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。

2枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。
把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。
3 带构造方法的枚举构造方法必须定义成私有的。如果有多个构造方法,根据参数选择?枚举元素xx和xx()的效果一样,都是调用默认的构造方法。
4 枚举只有一个成员时,就可以作为一种单例的实现方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: