黑马程序员----高新技术之 枚举
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 枚举只有一个成员时,就可以作为一种单例的实现方式。
相关文章推荐
- 黑马程序员_java高新技术--枚举
- 黑马程序员-高新技术(枚举)
- 黑马程序员——高新技术---eclipse使用技巧、静态导入、可变参数、增强for循环、 自动拆装箱、枚举
- 黑马程序员第八季——高新技术——枚举
- 黑马程序员——Java高新技术---枚举、内省、类加载器、注解
- 黑马程序员——高新技术---枚举及部分JDK1.5新特性
- 黑马程序员--高新技术--可变参数,增强for循环,枚举
- 黑马程序员-高新技术-枚举
- 黑马程序员——java高新技术:枚举
- 黑马程序员_高新技术_枚举
- 黑马程序员——高新技术(枚举)
- 黑马程序员_温习 高新技术一 (个人笔记)摘要(静态导入---可变参数----高级FOR循环---自动装箱(拆箱)----枚举----反射)
- 黑马程序员—【Java高新技术】之eclipse开发工具枚举及JDK1.5新特性
- Java高新技术-枚举和反射-----黑马程序员
- 黑马程序员--java高新技术----枚举
- 黑马程序员——高新技术--枚举
- 黑马程序员——高新技术----枚举及部分JDK新特性
- 黑马程序员_java高新技术 枚举
- 黑马程序员——Java高新技术——JDK4.5版本新特性枚举、高级for循环、静态导入、可变参数、基本数据类型的自动装箱与拆箱
- 黑马程序员_高新技术_枚举