黑马程序员_基础加强_枚举
2013-03-20 20:07
176 查看
-------
android培训、java培训、期待与您交流! ----------
1.枚举:就是要让某个类型的变量取值是能为若干个固定之中的一个,否则,编译就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标,在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。例如星期一到星期日七个数据元素组成了一周的“数据集”,用普通函数也可以实现枚举类,要有以下特点:
1、私有的构造方法
2、每个元素分别用一个公有的静态成员变量表示(即都用public static final修饰)
3、可以有若干个公有方法抽象方法,例如,提供nextDay方法必须是抽象的。
用普通类来实现枚举类
在java1.5之后,java中加入了枚举类的概念,枚举类用enum关键字来修饰,枚举类是一个特殊的类,但是它同样有自己的属性和方法,也可以实现多个接口,枚举类的注意事项:
1. 枚举类型不能使用extends关键字,但是可以使用implements关键字。这样我们可以把不同枚举类型共有的行为提取到接口中,来规范枚举类型的行为。
2. 枚举类型的自定义构造函数并不能覆盖默认执行的构造函数,它会跟在默认构造函数之后执行。
3. 枚举类型的自定义构造函数必须是私有的。你不需要在构造函数上添加private关键字,编译器会为我们代劳的。
4. 枚举类型中枚举常量的定义必须放在最上面,其后才能是变量和方法的定义。
android培训、java培训、期待与您交流! ----------
1.枚举:就是要让某个类型的变量取值是能为若干个固定之中的一个,否则,编译就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标,在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。例如星期一到星期日七个数据元素组成了一周的“数据集”,用普通函数也可以实现枚举类,要有以下特点:
1、私有的构造方法
2、每个元素分别用一个公有的静态成员变量表示(即都用public static final修饰)
3、可以有若干个公有方法抽象方法,例如,提供nextDay方法必须是抽象的。
用普通类来实现枚举类
//定义个WeekDay来实现星期的枚举 public abstract class WeekDay { private int value; private String name; private WeekDay(int value,String name) { this.value=value; this.name=name; } public static final WeekDay SUN=new WeekDay(1,"SUN") { @Override public WeekDay netDay() { // TODO Auto-generated method stub return MON; } }; public static final WeekDay MON=new WeekDay(2,"MON") { @Override public WeekDay netDay() { // TODO Auto-generated method stub return TUE; } }; public static final WeekDay TUE=new WeekDay(3,"TUE") { @Override public WeekDay netDay() { // TODO Auto-generated method stub return WED; } }; public static final WeekDay WED=new WeekDay(4,"WED") { @Override public WeekDay netDay() { // TODO Auto-generated method stub return THU; } }; public static final WeekDay THU=new WeekDay(5,"THU") { @Override public WeekDay netDay() { // TODO Auto-generated method stub return FRI; } }; public static final WeekDay FRI=new WeekDay(6,"FRI") { @Override public WeekDay netDay() { // TODO Auto-generated method stub return SAT; } }; public static final WeekDay SAT=new WeekDay(7,"SAT") { @Override public WeekDay netDay() { // TODO Auto-generated method stub return SUN; } }; public abstract WeekDay netDay(); public int getValue() { return this.value; } public String getName() { return this.name; } }
public class WeekDayTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub WeekDay sunday=WeekDay.SUN; System.out.println("今天是"+sunday.getName()); System.out.println(sunday.getName()+"的下一天是"+(sunday.netDay()).getName()); } }
在java1.5之后,java中加入了枚举类的概念,枚举类用enum关键字来修饰,枚举类是一个特殊的类,但是它同样有自己的属性和方法,也可以实现多个接口,枚举类的注意事项:
1. 枚举类型不能使用extends关键字,但是可以使用implements关键字。这样我们可以把不同枚举类型共有的行为提取到接口中,来规范枚举类型的行为。
2. 枚举类型的自定义构造函数并不能覆盖默认执行的构造函数,它会跟在默认构造函数之后执行。
3. 枚举类型的自定义构造函数必须是私有的。你不需要在构造函数上添加private关键字,编译器会为我们代劳的。
4. 枚举类型中枚举常量的定义必须放在最上面,其后才能是变量和方法的定义。
public enum EnumWeekDay { SUN(1) { @Override public EnumWeekDay nextDay() { // TODO Auto-generated method stub return MON; } }, MON(2) { @Override public EnumWeekDay nextDay() { // TODO Auto-generated method stub return TUE; } }, TUE(3) { @Override public EnumWeekDay nextDay() { // TODO Auto-generated method stub return WED; } }, WED(4) { @Override public EnumWeekDay nextDay() { // TODO Auto-generated method stub return THU; } }, THU(5) { @Override public EnumWeekDay nextDay() { // TODO Auto-generated method stub return FRI; } }, FRI(6) { @Override public EnumWeekDay nextDay() { // TODO Auto-generated method stub return SAT; } }, SAT(7) { @Override public EnumWeekDay nextDay() { // TODO Auto-generated method stub return SUN; } }; private int value; EnumWeekDay(int value) { this.value=value; } public abstract EnumWeekDay nextDay(); }
public class EnumWeekDayTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub EnumWeekDay weekday=EnumWeekDay.FRI; System.out.println("今天是:"+weekday); //返回weekday的下一天是哪一天 System.out.println(weekday+"的下一天是:"+weekday.nextDay()); //返回weekday在枚举类中的声明的位置 System.out.println(weekday+"在枚举中是第"+weekday.ordinal()+"个被声明"); //返回枚举类中所有的实例对象,并输出 EnumWeekDay[] weekDays=EnumWeekDay.values(); for(EnumWeekDay week:weekDays) { System.out.println(week); } } }
相关文章推荐
- 黑马程序员--Java基础加强学习笔记之重载和覆写、可变参数、枚举
- 黑马程序员-基础加强-IDE&新特性&枚举-No.06
- 黑马程序员——><基础加强一(eclipse-静态导入-享元设计模式-自动拆装箱-枚举-反射-类加载器)>
- 黑马程序员:基础加强(可变参数、增强for、枚举、javabBean、BeanUtils、注解、泛型)
- 黑马程序员 Java基础加强 枚举
- 黑马程序员-------(基础加强)枚举
- 黑马程序员_java_基础加强_静态导入_反射_枚举_注解_内省_泛型
- 黑马程序员—Java基础加强—(枚举)
- 黑马程序员: 基础加强之静态导入,可变参数,增强for,自动装箱,享元模式,枚举
- 黑马程序员--Java基础加强--01.枚举常量被使用的时候的内存图
- 黑马程序员-JAVA基础加强-枚举
- 黑马程序员基础加强——JDK1.5的新特性: 自动拆箱和机制 枚举
- 黑马程序员-基础加强-枚举
- 黑马程序员-Java基础加强之枚举
- 黑马程序员——java基础加强之枚举
- 黑马程序员 java基础知识加强---枚举
- 黑马程序员_java基础加强-枚举和反射
- 黑马程序员_基础加强(2) 枚举
- 黑马程序员_Java基础加强实现带有构造方法的枚举
- 黑马程序员---基础加强---8枚举