黑马程序员-java枚举
来源:互联网 发布:房屋装修平面设计软件 编辑:程序博客网 时间:2024/04/28 10:06
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
枚举类型是一种基本数据类型而不是构造类型,它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
枚举可以根据Integer、Long、Short或Byte中的任意一种数据类型来创建一种新型变量。这种变量能设置为已经定义的一组之中的一个,有效地防止用户提供无效值。该变量可使代码更加清晰,因为它可以描述特定的值。
定义:是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.
使用格式:枚举类型放在窗体模块、标准模块或共用模块中的声明部分,通过enum语句来定义。
例子:
public class TestEnum {
/*最普通的枚举*/
publicenum ColorSelect {
red,green, yellow, blue;
}
/* 枚举也可以象一般的类一样添加方法和属性,你可以为它添加静态和非静态的属性或方法,这一切都象你在一般的类中做的那样. */
publicenum Season {
// 枚举列表必须写在最前面,否则编译出错
winter, spring, summer, fall;
private final static String location = "Phoenix";
public static Season getBest() {
if (location.equals("Phoenix"))
return winter;
else
return summer;
}
}
/*还可以有构造方法*/
publicenum Temp {
/*通过括号赋值,而且必须有带参构造器和一属性跟方法,否则编译出错
* 赋值必须是都赋值或都不赋值,不能一部分赋值一部分不赋值
* 如果不赋值则不能写构造器,赋值编译也出错*/
absoluteZero(-459), freezing(32),boiling(212), paperBurns(451);
private final int value;
public int getValue() {
return value;
}
//构造器默认也只能是private,从而保证构造函数只能在内部使用
Temp(int value) {
this.value = value;
}
}
publicstatic void main(String[] args) {
/*
* 枚举类型是一种类型,用于定义变量,以限制变量的赋值 赋值时通过"枚举名.值"来取得相关枚举中的值
*/
ColorSelect m = ColorSelect.blue;
switch (m) {
/*注意:枚举重写了ToString(),说以枚举变量的值是不带前缀的
*所以为blue而非ColorSelect.blue
*/
case red:
System.out.println("color is red");
break;
casegreen:
System.out.println("color is green");
break;
caseyellow:
System.out.println("color is yellow");
break;
caseblue:
System.out.println("color isblue");
break;
}
System.out.println("遍历ColorSelect中的值");
/*通过values()获得枚举值的数组*/
for(ColorSelect c : ColorSelect.values()) {
System.out.println(c);
}
System.out.println("枚举ColorSelect中的值有:"+ColorSelect.values().length+"个");
/*ordinal()返回枚举值在枚举中的索引位置,从0开始*/
System.out.println(ColorSelect.red.ordinal());//0
System.out.println(ColorSelect.green.ordinal());//1
System.out.println(ColorSelect.yellow.ordinal());//2
System.out.println(ColorSelect.blue.ordinal());//3
/*枚举默认实现了java.lang.Comparable接口*/
System.out.println(ColorSelect.red.compareTo(ColorSelect.green));
System.out.println(Season.getBest());
for(Temp t:Temp.values()){
/*通过getValue()取得相关枚举的值*/
System.out.println(t+"的值是"+t.getValue());
}
}
}
用法一:常量
在JDK1.5 之前,我们定义常量都是: publicstaticfianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
Java代码
1. public enum Color {
2. RED, GREEN, BLANK, YELLOW
3. }
用法二:switch
JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。
Java代码
1. enum Signal {
2. GREEN, YELLOW, RED
3. }
4. public class TrafficLight {
5. Signal color = Signal.RED;
6. public void change() {
7. switch (color) {
8. case RED:
9. color = Signal.GREEN;
10. break;
11. case YELLOW:
12. color = Signal.RED;
13. break;
14. case GREEN:
15. color = Signal.YELLOW;
16. break;
17. }
18. }
19. }
用法三:向枚举中添加新方法
如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。
Java代码
1. public enum Color {
2. RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
3. // 成员变量
4. private String name;
5. private int index;
6. // 构造方法
7. private Color(String name, int index) {
8. this.name = name;
9. this.index = index;
10. }
11. // 普通方法
12. public static String getName(int index) {
13. for (Color c : Color.values()) {
14. if (c.getIndex() == index) {
15. return c.name;
16. }
17. }
18. return null;
19. }
20. // get set 方法
21. public String getName() {
22. return name;
23. }
24. public void setName(String name) {
25. this.name = name;
26. }
27. public int getIndex() {
28. return index;
29. }
30. public void setIndex(int index) {
31. this.index = index;
32. }
33. }
用法四:覆盖枚举的方法
下面给出一个toString()方法覆盖的例子。
Java代码
1. public enum Color {
2. RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
3. // 成员变量
4. private String name;
5. private int index;
6. // 构造方法
7. private Color(String name, int index) {
8. this.name = name;
9. this.index = index;
10. }
11. //覆盖方法
12. @Override
13. public String toString() {
14. return this.index+"_"+this.name;
15. }
16. }
用法五:实现接口
所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。
Java代码
1. public interface Behaviour {
2. void print();
3. String getInfo();
4. }
5. public enum Color implements Behaviour{
6. RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
7. // 成员变量
8. private String name;
9. private int index;
10. // 构造方法
11. private Color(String name, int index) {
12. this.name = name;
13. this.index = index;
14. }
15. //接口方法
16. @Override
17. public String getInfo() {
18. return this.name;
19. }
20. //接口方法
21. @Override
22. public void print() {
23. System.out.println(this.index+":"+this.name);
24. }
25. }
用法六:使用接口组织枚举
Java代码
1. public interface Food {
2. enum Coffee implements Food{
3. BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
4. }
5. enum Dessert implements Food{
6. FRUIT, CAKE, GELATO
7. }
8. }
----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------
详情请查看:
- 黑马程序员-java-枚举
- 黑马程序员-java 枚举
- 黑马程序员java枚举
- 黑马程序员 Java枚举
- 黑马程序员-java枚举
- 黑马程序员---java枚举
- 黑马程序员----Java 枚举
- 黑马程序员java----枚举
- 黑马程序员-java基础 枚举
- 黑马程序员-java中的枚举
- 黑马程序员—JAVA枚举
- 黑马程序员--java枚举类型
- 黑马程序员---java 枚举类型
- 黑马程序员 Java高新技术---枚举
- 黑马程序员-java枚举总结
- 黑马程序员--java高新技术----枚举
- 黑马程序员------java高新技术、枚举
- 黑马程序员---高级java---枚举
- 浏览器缓存机制
- dlutoj1247 hashtable数字查询优化
- Lesson_for_java_day13--java的常用类—StringBuffer、基本数据类型包装类、Date、Calender、Math、Runtime、System等
- HDOJ-2119 二分图最小覆盖=二分图最大匹配数
- 啥活都得干好
- 黑马程序员-java枚举
- Nosql Mongodb之旅(22)—MongoDB Replica Sets
- Oracle分区实战分享
- 2013级C++第9周(春)项目——运算符重载(二) 【项目5】
- C中 char *s 和 char s[] 有什么区别?
- hdu 4503 湫湫系列故事——植树节
- 模板,FFT 快速傅里叶变化
- Mybatis Spring 组合的三种方式
- infoforduiduipeng