黑马程序员技术交流社区

标题: 【枚举Enum的初步认识】 [打印本页]

作者: 一枚小小媛    时间: 2015-7-26 10:40
标题: 【枚举Enum的初步认识】
昨晚复习的时候看到一个比较陌生的知识点。Java1.5新特性之一 : Enum
一开始真心很难理解啊 - -。本来女生抽象思维不是很好。然后也看了毕老师讲的枚举那些笔记。
然后自己捣弄了一下。总结成两个对比的代码,从原本的操作思想 进入 枚举操作。
【一】首先是传统的代码方式。
①我自己写了一个简单的需求。设定当前是星期几,并获取明天是星期几。( - -||就这么简单了w(゚Д゚)w 想不出来其他的了)
②看完代码之后,大家可能会发现。在枚举没有出现之前,上面的需求很可能就是这么实现的。这样其实会存在不严谨的地方。打个比方就是说,开发的时候并不是一个人完成全部工作,分工合作是开发的主流。如果下面的方法是你写的,但是接手使用的是另外的同事等等,很可能会出现参数\常量的传入错误。
比如:case语句里面只判断了 0 ~ 6 的参数。如果某个2货在调用自己写的方法时候传入了一个7 ···((╯‵□′)╯︵┻━┻,然并卵)因为没有符合case,程序没有任何变化,甚至达不到前期想要的结果。我也在想,其实超出范围的可以在default中判断或者提示之类的,但是这样子还是会影响整个程序的调用吧。增加了很多麻烦事。
  1. package enums;

  2. /**
  3. * @author 小媛
  4. * ①传统的方式获取使用常量
  5. * ② 0 ~ 6,分别表示周日 ~ 周六
  6. * ③构建一个方法,传入当天的星期几,获取下一天是星期几
  7. */
  8. public class EnumDemo1 {
  9.         public static void main(String[] args) {

  10.                 Week1 week = new Week1(0);
  11.                 NextWeek(week.getWeek());
  12.         }

  13.         /**
  14.          * 通过判断当前是星期几,并往下更新一天
  15.          *
  16.          * @param currentWeek
  17.          */
  18.         private static void NextWeek(int currentWeek) {
  19.                 int w = 0;
  20.                 switch (currentWeek) {
  21.                 case 0:
  22.                         w = 1;
  23.                         break;

  24.                 case 1:
  25.                         w = 2;
  26.                         break;

  27.                 case 2:
  28.                         w = 3;
  29.                         break;

  30.                 case 3:
  31.                         w = 4;
  32.                         break;

  33.                 case 4:
  34.                         w = 5;
  35.                         break;

  36.                 case 5:
  37.                         w = 6;
  38.                         break;

  39.                 case 6:
  40.                         w = 0;
  41.                         break;
  42.                 default:
  43.                         break;
  44.                 }
  45.                
  46.                 //模拟:当传入的星期参数int为0(即星期日)时候,得到的下一天是1(即星期一)
  47.                 System.out.println(w);
  48.         }
  49. }

  50. class Week1 {
  51.         private int week;

  52.         public Week1(int week) {
  53.                 super();
  54.                 this.week = week;
  55.         }

  56.         public int getWeek() {
  57.                 return week;
  58.         }

  59.         public void setWeek(int week) {
  60.                 this.week = week;
  61.         }

  62. }
复制代码
【二】所以所以,java1.5的时候就引入了Enum 枚举,来完善并严谨这种 关于常量的调用什么的。o(* ̄▽ ̄*)o
即便方法是自己写的,给别人用的时候,由于只能传入枚举,需要传入的常量都已经被局限。不可能说会有数据类型错误,还是常量不符合规定的了
代码如下。
  1. package enums;

  2. /**
  3. * @author 小媛
  4. * ①使用枚举对比传统的常量参数
  5. */
  6. public class EnumDemo2 {
  7.         public static void main(String[] args) {
  8.                 Week2 week = Week2.SUN;
  9.                 NextWeek(week);
  10.         }

  11.         public static void NextWeek(Week2 currentWeek) {
  12.                
  13.                 switch (currentWeek) {
  14.                 case SUN:
  15.                         currentWeek = Week2.MON;
  16.                         break;
  17.                 case MON:
  18.                         currentWeek = Week2.TUES;
  19.                         break;
  20.                 case TUES:
  21.                         currentWeek = Week2.WED;
  22.                         break;
  23.                 case WED:
  24.                         currentWeek = Week2.THUR;
  25.                         break;
  26.                 case THUR:
  27.                         currentWeek = Week2.FRI;
  28.                         break;
  29.                 case FRI:
  30.                         currentWeek = Week2.SAT;
  31.                         break;
  32.                 case SAT:
  33.                         currentWeek = Week2.SUN;
  34.                         break;
  35.                 default:
  36.                         break;
  37.                 }
  38.                
  39.                 //通过模拟数据:当枚举常量是SUN 的时候,下一天则是MON
  40.                 System.out.println(currentWeek);
  41.         }
  42. }

  43. enum Week2 {
  44.         SUN, MON, TUES, WED, THUR, FRI, SAT;
  45. }
复制代码

【三】码字好辛苦啊。就暂时这么多了。更高深的枚举操作好像还能用接口、构造函数之类的。等我看明白了再补充吧
如果有理解错误,请其它码神指点迷津。(纯属抛砖引玉了)
[女王之路]



作者: 嗬嗬嗬_000    时间: 2015-7-26 11:08
支持,楼主幸苦了
作者: 郁金香大公爵    时间: 2015-7-26 11:40
这么细致。赞一个,不过你这黑马币多啊,刚创建就这么多,,你也帮我弄弄吧 哈哈
作者: 一枚小小媛    时间: 2015-7-26 11:57
郁金香大公爵 发表于 2015-7-26 11:40
这么细致。赞一个,不过你这黑马币多啊,刚创建就这么多,,你也帮我弄弄吧 哈哈 ...

回答问题就可以得黑马币了啊,还有每天登陆就能获得黑马币。之前经常上来看看别人的帖子。我之前回答的问题都么得技术分。
作者: 為了夢想    时间: 2015-7-26 11:58
谢谢分享
作者: 帅帅loyal    时间: 2015-7-26 12:09
你每次写代码都要文档注释呢?
作者: 一枚小小媛    时间: 2015-7-26 21:12
帅帅loyal 发表于 2015-7-26 12:09
你每次写代码都要文档注释呢?

因为觉得写写注释比较清晰,在学习阶段也有助于自己复习。

作者: lizequn007wo    时间: 2015-7-26 21:26
嗯!很仔细!
作者: 3174918418    时间: 2015-7-26 22:27
谢谢分享,  先收起來當筆記:lol
作者: 帅帅loyal    时间: 2015-7-27 09:51
一枚小小媛 发表于 2015-7-26 21:12
因为觉得写写注释比较清晰,在学习阶段也有助于自己复习。

我说的是文档注释,不是注释,我看的你的另一篇帖子里边好多都是文档注释,我表示从来不写,只写//这样的注释
作者: 一枚小小媛    时间: 2015-7-27 12:34
帅帅loyal 发表于 2015-7-27 09:51
我说的是文档注释,不是注释,我看的你的另一篇帖子里边好多都是文档注释,我表示从来不写,只写//这样的 ...

/**
*/这种类型的注释,有帮助于在其他类中调用的时候,只需要将鼠标放置在该对象或该变量上,就会自动提示所注释的文字信息。一是帮助开发者自己日后复习,而是帮助后继的开发者更便捷更高效的熟悉你的代码。帮助别人也是在帮助自己。
作者: 何鹏程    时间: 2015-7-27 12:45
没看明白啊。
作者: 一枚小小媛    时间: 2015-7-28 00:02
何鹏程 发表于 2015-7-27 12:45
没看明白啊。

把两个例子的代码对比一下来看。就知道引入枚举的意义了
作者: 一枚小小媛    时间: 2015-7-28 23:52
【枚举三】深夜发总结。困死媛媛了··=_=
发完睡觉啦
  1. package enums;

  2. /**
  3. * @author 小媛
  4. * ① 使用带有参数的枚举
  5. * ②枚举中添加了属性的获取方法
  6. */
  7. public class EnumDemo3 {
  8.         public static void main(String[] args) {
  9.                 //假定数据:一开始给的是SUN
  10.                 Week3 week = Week3.SUN;
  11.                
  12.                 //调用方法获取明天是星期几
  13.                 week = NextWeek(week);
  14.                 System.out.println(week.getWeekName());
  15.                 }
  16.        
  17.         public static Week3 NextWeek(Week3 currentWeek) {
  18.                
  19.                 switch (currentWeek) {
  20.                 case SUN:
  21.                         currentWeek = Week3.MON;
  22.                         break;
  23.                 case MON:
  24.                         currentWeek = Week3.TUES;
  25.                         break;
  26.                 case TUES:
  27.                         currentWeek = Week3.WED;
  28.                         break;
  29.                 case WED:
  30.                         currentWeek = Week3.THUR;
  31.                         break;
  32.                 case THUR:
  33.                         currentWeek = Week3.FRI;
  34.                         break;
  35.                 case FRI:
  36.                         currentWeek = Week3.SAT;
  37.                         break;
  38.                 case SAT:
  39.                         currentWeek = Week3.SUN;
  40.                         break;
  41.                 default:
  42.                         break;
  43.                 }
  44.                
  45.                 return currentWeek;
  46.         }
  47. }

  48. enum Week3 {
  49.         SUN(0, "星期天"), MON(1, "星期一"), TUES(2, "星期二"), WED(3,"星期三"), THUR(4,"星期四"), FRI(5,""), SAT(6,"");

  50.         private int index;
  51.         private String weekName;

  52.         private Week3(int index, String weekName) {
  53.                 this.index = index;
  54.                 this.weekName = weekName;
  55.         }

  56.         public int getIndex() {
  57.                 return index;
  58.         }

  59.         public void setIndex(int index) {
  60.                 this.index = index;
  61.         }

  62.         public String getWeekName() {
  63.                 return weekName;
  64.         }

  65.         public void setWeekName(String weekName) {
  66.                 this.weekName = weekName;
  67.         }

  68. }
复制代码




作者: 一枚小小媛    时间: 2015-7-29 09:50
【枚举三】补充 (⊙﹏⊙)b
代码写得太快,忘了枚举类里面的FIR SAT没有写上String 了。看懂的小伙伴自行补齐。
这个枚举的用法,是在上面的枚举二的扩展。有兴趣深入学习枚举的同学可以交流一下
作者: 一枚小小媛    时间: 2015-7-29 20:26
累累累。自己顶一下 d=====( ̄▽ ̄*)b




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2