黑马程序员——java中的枚举
2015-05-17 21:40
148 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
在编写程序时,我们有时候会想限定对象的值,如在在编写一周七天的对象时 ,我们需要的对象只有七个,为了避免程序出错的几率,如出现第八天,那就要求我们限定对象的建立,在限定对象的建立中,我们想到的是单例模式,在单例模式中我们限定的对象的建立,使的该类对象只有个,同样的方法可以用解决我们现在的问题`。
编写程序限定对象值的建立:
运行结果:
![](https://img-blog.csdn.net/20150517212056061)
在程序中,我们达到了只能建立若干个可用对象的目的,有效提高了程序的安全性。在上面的类的基础上我们改写,增加该类的功能,因为一周的天数对象是有顺序的,所以我们加进了获得下可以获得下一天的方法。
执行效果:
![](https://img-blog.csdn.net/20150517212640151)
在程序中我们用到了抽象方法,因为每一个对象获得下一对象的方法不同,所以要求每一个对象建立时重写NextDay方法。
在上面的两个程序中,我们用普通的方法的编写了具有限定建立对象值得类,该类只有若干个可用对象,并且这些对象有一定的顺序,有可以获得下一个对象的方法。上述编写的程序较为复杂,为了程序的编写的简单,Java中把具有上面功能的类定义为了特殊的类型——枚举, 现在通过一个简单的枚举说明枚举的的定义。
运行效果
![](https://img-blog.csdn.net/20150517213418698)
在上面的程序与第一个程序具有相同的作用,只是这次用枚举编写的程序,编写的过程比第一个程序简单,所以说枚举的作用与普通类有着相同的作用,但是代码更加简单化。同时枚举类型还提供了一些方法,方便枚举的操作。主要可用的方法有ordinal、name和getDeclaringClass。方法ordinal返回枚举项在枚举对象中的序号;方法name则返回枚举项的名称(与方法toString效果相同),通常用于取得枚举变量中保存的枚举项名称;而方法getDeclaringClass则用于取得当前枚举值所在类的完整称。
注意,对象必须在类的前面。
在程序二中我增加了获得下一个对象的方法,现在我们用枚举重新改程序,进一步加深对枚举的理解:
在编写程序时,我们有时候会想限定对象的值,如在在编写一周七天的对象时 ,我们需要的对象只有七个,为了避免程序出错的几率,如出现第八天,那就要求我们限定对象的建立,在限定对象的建立中,我们想到的是单例模式,在单例模式中我们限定的对象的建立,使的该类对象只有个,同样的方法可以用解决我们现在的问题`。
编写程序限定对象值的建立:
/** * 编写一个可以表示一周内所有天数的类 */ public class EnumTest1 { public static void main(String[] args) { //调用WeekDay对象 WeekDay.Friday.show(); WeekDay.Monday.show(); } } class WeekDay { private String str = null; //构造函数私有,不能创建新对象 private WeekDay (String str) { this.str = str; } //在类的内部生成指定对象 static final public WeekDay Monday = new WeekDay("星期一"); static final public WeekDay Tuesday = new WeekDay("星期二"); static final public WeekDay Wednesday = new WeekDay("星期三"); static final public WeekDay Thursday = new WeekDay("星期四"); static final public WeekDay Friday = new WeekDay("星期五"); static final public WeekDay Saturday = new WeekDay("星期六"); static final public WeekDay Sunday = new WeekDay("星期天"); void show() { System.out.println(str); } }
运行结果:
在程序中,我们达到了只能建立若干个可用对象的目的,有效提高了程序的安全性。在上面的类的基础上我们改写,增加该类的功能,因为一周的天数对象是有顺序的,所以我们加进了获得下可以获得下一天的方法。
/** * 编写一个可以表示一周内所以天数的类 *可以获得下一对象 */ public class EnumTest1 { public static void main(String[] args) { //调用WeekDay对象 WeekDay.Friday.show(); WeekDay.Monday.show(); //获得下一天 WeekDay day = WeekDay.Monday.nextDay(); day.show(); } } //定义一周的天数的抽象的类 abstract class WeekDay { private String str = null; //构造函数私有,不能创建新对象 private WeekDay (String str) { this.str = str; } //在类的内部生成指定对象 static final public WeekDay Monday = new WeekDay("星期一"){ //重写nextDay @Override public WeekDay nextDay() { return WeekDay.Tuesday; }}; static final public WeekDay Tuesday = new WeekDay("星期二"){ @Override public WeekDay nextDay() { return WeekDay.Wednesday; }}; static final public WeekDay Wednesday = new WeekDay("星期三"){ @Override public WeekDay nextDay() { return WeekDay.Thursday; }}; static final public WeekDay Thursday = new WeekDay("星期四"){ @Override public WeekDay nextDay() { return WeekDay.Friday; }}; static final public WeekDay Friday = new WeekDay("星期五"){ @Override public WeekDay nextDay() { return WeekDay.Saturday; }}; static final public WeekDay Saturday = new WeekDay("星期六"){ @Override public WeekDay nextDay() { return WeekDay.Sunday; }}; static final public WeekDay Sunday = new WeekDay("星期天"){ @Override public WeekDay nextDay() { return WeekDay.Monday; }}; void show() { System.out.println(str); } //抽象方法,在每一个对象重写该方法 //作用是获得下一天 abstract public WeekDay nextDay(); }
执行效果:
在程序中我们用到了抽象方法,因为每一个对象获得下一对象的方法不同,所以要求每一个对象建立时重写NextDay方法。
在上面的两个程序中,我们用普通的方法的编写了具有限定建立对象值得类,该类只有若干个可用对象,并且这些对象有一定的顺序,有可以获得下一个对象的方法。上述编写的程序较为复杂,为了程序的编写的简单,Java中把具有上面功能的类定义为了特殊的类型——枚举, 现在通过一个简单的枚举说明枚举的的定义。
/** * 定义枚举类 * */ public class EnumTest2 { public static void main(String[] args) { //调用WeekDay对象 WeekDayEnum.Friday.show(); WeekDayEnum.Monday.show(); WeekDayEnum day = WeekDayEnum.Saturday; System.out.println(day.name( b117 )); //枚举提供的部分方法 System.out.println(day.ordinal()); System.out.println(day.getClass()); } } //定义一个枚举类 enum WeekDayEnum { //生成指定对象 Monday("星期一"), Tuesday("星期二"), Wednesday("星期三"), Thursday("星期四"), Friday("星期五"), Saturday("星期六"), Sunday("星期日"); private String str = null; private WeekDayEnum(String str) { this.str = str; } public void show() { System.out.println(str); } }
运行效果
在上面的程序与第一个程序具有相同的作用,只是这次用枚举编写的程序,编写的过程比第一个程序简单,所以说枚举的作用与普通类有着相同的作用,但是代码更加简单化。同时枚举类型还提供了一些方法,方便枚举的操作。主要可用的方法有ordinal、name和getDeclaringClass。方法ordinal返回枚举项在枚举对象中的序号;方法name则返回枚举项的名称(与方法toString效果相同),通常用于取得枚举变量中保存的枚举项名称;而方法getDeclaringClass则用于取得当前枚举值所在类的完整称。
注意,对象必须在类的前面。
在程序二中我增加了获得下一个对象的方法,现在我们用枚举重新改程序,进一步加深对枚举的理解:
public class EnumTest2 { public static void main(String[] args) { //获得下一个对象 WeekDayEnum day = WeekDayEnum.Wednesday.NextDay(); System.out.println(day.name()); } } //定义一个枚举类 enum WeekDayEnum { //生成指定对象 Monday("星期一") { //重写NextDay方法 @Override public WeekDayEnum NextDay() { // TODO Auto-generated method stub return Tuesday; } }, Tuesday("星期二") { @Override public WeekDayEnum NextDay() { // TODO Auto-generated method stub return Wednesday; } }, Wednesday("星期三") { @Override public WeekDayEnum NextDay() { // TODO Auto-generated method stub return Thursday; } }, Thursday("星期四") { @Override public WeekDayEnum NextDay() { // TODO Auto-generated method stub return Friday; } }, Friday("星期五") { @Override public WeekDayEnum NextDay() { // TODO Auto-generated method stub return Saturday; } }, Saturday("星期六") { @Override public WeekDayEnum NextDay() { // TODO Auto-generated method stub return Saturday; } }, Sunday("星期日") { @Override public WeekDayEnum NextDay() { // TODO Auto-generated method stub return Monday; } }; private String str = null; private WeekDayEnum(String str) { this.str = str; } //抽象方法 public abstract WeekDayEnum NextDay(); public void show() { System.out.println(str); } }
相关文章推荐
- 黑马程序员——【Java高新技术】——JDK1.5新特性:静态导入、可变参数、增强型for循环、自动装箱拆箱、枚举
- 黑马程序员_java高新技术之枚举
- 黑马程序员—Java提高1(eclipse工具,枚举,反射)
- 黑马程序员:Java基础总结----枚举
- 黑马程序员--Java基础加强--07枚举、反射、注释
- 黑马程序员====JAVA基础之枚举====
- 黑马程序员_JAVA_枚举和反射总结
- 黑马程序员———Java1.5 新特性之枚举
- 黑马程序员————java中类的加载、反射、动态代理、枚举
- 黑马程序员_java_基础加强_静态导入_反射_枚举_注解_内省_泛型
- 黑马程序员_王康 java反射,枚举,注解
- 黑马程序员_java中的枚举
- 黑马程序员—Java基础加强(枚举)
- 黑马程序员_Java枚举的七种常见用法
- 黑马程序员_Java基础加强实现带有构造方法的枚举
- 黑马程序员-java枚举
- 黑马程序员:基础加强(可变参数、增强for、枚举、javabBean、BeanUtils、注解、泛型)
- 黑马程序员_Java高新技术之枚举
- 黑马程序员——Java中的枚举
- 黑马程序员_Java基础篇(七)——枚举