A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Sakuratossi 中级黑马   /  2014-8-31 10:04  /  920 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

普通类如何实现枚举功能:
1. 私有构造方法
2. 将每个元素分别用公有静态成员变量表示
3. 可以用若干公有方法或抽象方法实现

定义一个Weekday的类来模拟枚举功能。

  1. package it.cast.day02;

  2. public abstract class WeekDayOld {

  3.         // 不能被外部创建对象
  4.         private WeekDayOld(){}
  5. /*       
  6.          * 普通类如何实现枚举功能:
  7.          * 1. 私有构造方法
  8.          * 2. 将每个元素分别用公有静态成员变量表示
  9.          * 3. 可以用若干公有方法或抽象方法实现
  10.          
  11.         // 一周有七天:星期类型的常量对象
  12.         public final static WeekDay SUN = new WeekDay();
  13.         public final static WeekDay MON = new WeekDay();
  14.         public final static WeekDay TUE = new WeekDay();
  15.         public final static WeekDay WED = new WeekDay();
  16.         public final static WeekDay THU = new WeekDay();
  17.         public final static WeekDay FRI = new WeekDay();
  18.         public final static WeekDay SAT = new WeekDay();
  19.        
  20.         //theNextDay 不能是静态,因为它一定会被某一个对象调用。  通过这个方法返回一个对象
  21.         public WeekDay theNextDay()
  22.         {
  23.                 //如果当前调用这个方法的对象是星期*。就返回它的下一天对象。
  24.                 if(this == SUN)
  25.                         return MON;
  26.                 if(this == MON)
  27.                         return TUE;
  28.                 if(this == TUE)       
  29.                         return WED;
  30.                 if(this == WED)
  31.                         return THU;
  32.                 if(this == THU)
  33.                         return FRI;
  34.                 if(this == FRI)
  35.                         return SAT;
  36.                 if(this == SAT)
  37.                         return SUN;
  38.                 return null;       
  39.         }
  40.         */
  41.         //方法2,抽象方法 子类对象实现抽象方法,省去写if 的麻烦
  42.         public final static WeekDayOld SUN = new WeekDayOld()
  43.         {
  44.                 @Override
  45.                 public WeekDayOld theNextDay() {
  46.                         // TODO Auto-generated method stub
  47.                         return MON;
  48.                 }       
  49.         };
  50.         public final static WeekDayOld MON = new WeekDayOld(){

  51.                 @Override
  52.                 public WeekDayOld theNextDay() {
  53.                         // TODO Auto-generated method stub
  54.                         return TUE;
  55.                 }
  56.                
  57.         };
  58.         public final static WeekDayOld TUE = new WeekDayOld()
  59.         {

  60.                 @Override
  61.                 public WeekDayOld theNextDay() {
  62.                         // TODO Auto-generated method stub
  63.                         return null;
  64.                 }
  65.                
  66.         };
  67. //        public final static WeekDay WED = new WeekDay();
  68. //        public final static WeekDay THU = new WeekDay();
  69. //        public final static WeekDay FRI = new WeekDay();
  70. //        public final static WeekDay SAT = new WeekDay();
  71.        
  72.         public abstract WeekDayOld theNextDay();
  73.        
  74.         public String toString(){
  75.                
  76.                 if(this == SUN)
  77.                         return "SUN";
  78.                 if(this == MON)
  79.                         return "MON";
  80.                 if(this == TUE)       
  81.                         return "TUE";
  82. //                if(this == WED)
  83. //                        return "WED";
  84. //                if(this == THU)
  85. //                        return "THU";
  86. //                if(this == FRI)
  87. //                        return "FRI";
  88. //                if(this == SAT)
  89. //                        return "SAT";
  90.                 return null;       
  91.         }
  92. }

  93. package it.cast.day02;

  94. public class EnumTest {

  95.         public static void main(String[] args) {
  96.                 // TODO Auto-generated method stub
  97.         /*       
  98.                 WeekDayOld Weekday = WeekDayOld.SUN;
  99.                 System.out.println(Weekday.theNextDay());
  100.                 */
  101.                 WeekDayEnum weekday = WeekDayEnum.MON;
  102.                 System.out.println(weekday);
  103.                 System.out.println(weekday.ordinal());
  104.                 System.out.println(weekday.valueOf("TUE"));
  105.                 System.out.println(weekday.values().length);
  106.                 System.out.println("----------------");
  107.                 for(WeekDayEnum wd: WeekDayEnum.values())
  108.                 {
  109.                         System.out.println(wd.name());
  110.                 }
  111.         }
  112.        
  113.        

  114. }
复制代码

3 个回复

倒序浏览
这个不是视频里讲过的吗
回复 使用道具 举报
你的代码好狠,我才刚学这一块,看了好一会才懂
回复 使用道具 举报
用了匿名内部类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马