黑马程序员技术交流社区
标题:
枚举疑问(普通类模拟枚举)
[打印本页]
作者:
wodeairenw
时间:
2013-3-19 17:30
标题:
枚举疑问(普通类模拟枚举)
本帖最后由 wodeairenw 于 2013-3-19 18:12 编辑
public class EnumTest
{
public static void main(String[] args)
{
WeekDay weekDay = WeekDay.MON;//这个地方如何理解,静态,调用类名.MON获得对象?
System.out.println(weekDay.nextDay());
}
}
public class WeekDay//自己规定类里面的WeekDay类型的对象,普通类模拟枚举类
{
private WeekDay(){}
public final static WeekDay SUN = new WeekDay();//静态来修饰WeekDay SUN引用?还是理解为修饰对象,对象是在堆内存中的吧,静态在方法区。这样个代码感觉是静态修饰对象,静态是不可以修饰对象的吧。
//如果把WeekDay换成weekday不和类名一致,为什么编译错误?那个大神能不能分析下枚举定义格式,如何理解枚举,和这个代码 在内存中时如何调用的?
public final static WeekDay MON = new WeekDay();
public WeekDay nextDay()
{
if(this == SUN)
{
return MON;
}
else
{
return SUN;
}
}
问题1:静态来修饰WeekDay SUN引用?还是理解为修饰对象,对象是在堆内存中的吧,静态在方法区。
问题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