黑马程序员技术交流社区

标题: 枚举疑问(普通类模拟枚举) [打印本页]

作者: wodeairenw    时间: 2013-3-19 17:30
标题: 枚举疑问(普通类模拟枚举)
本帖最后由 wodeairenw 于 2013-3-19 18:12 编辑
  1. public class EnumTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 WeekDay weekDay = WeekDay.MON;//这个地方如何理解,静态,调用类名.MON获得对象?
  6.          System.out.println(weekDay.nextDay());
  7.         }
  8. }
  9. public  class WeekDay//自己规定类里面的WeekDay类型的对象,普通类模拟枚举类
  10. {
  11. private WeekDay(){}

  12. public final static WeekDay SUN = new WeekDay();//静态来修饰WeekDay SUN引用?还是理解为修饰对象,对象是在堆内存中的吧,静态在方法区。这样个代码感觉是静态修饰对象,静态是不可以修饰对象的吧。
  13.                                                                             //如果把WeekDay换成weekday不和类名一致,为什么编译错误?那个大神能不能分析下枚举定义格式,如何理解枚举,和这个代码 在内存中时如何调用的?

  14. public final static WeekDay MON = new WeekDay();

  15. public WeekDay nextDay()
  16. {
  17.   if(this == SUN)
  18.   {
  19.    return MON;
  20.   }
  21.   else
  22.   {
  23.    return SUN;
  24.   }
  25. }
  26. 问题1:静态来修饰WeekDay SUN引用?还是理解为修饰对象,对象是在堆内存中的吧,静态在方法区。
  27. 问题2:如果把WeekDay换成weekday不和类名一致,为什么编译错误?那个大神能不能分析下枚举定义格式,要如何理解枚举,还有这个代码在内存中时如何调用的?
复制代码

作者: wodeairenw    时间: 2013-3-19 18:56
求大神解释。。。
作者: IT菜鸟    时间: 2013-3-21 21:37
我们都知道单例, 就是 一个类只能生产一个对象。 枚举相当于多例,就是一个类,可以产生多个有限对象。要想控制对象的产生,就必须控制构造方法的访问权限,所以枚举的构造方法定义为私有的,那么就保证了我们在类的外面无法随便创建对象。类外面无法创建对象,那么就必须在类的内部创建对象,要使用这些对象,因此这些对象必须
被定义为static的 就像public final static WeekDay SUN = new WeekDay();。static 的成员在类加载的时候就会被实例化, .类名就可以访问,就像WeekDay.MON。




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