黑马程序员技术交流社区

标题: 关于枚举类型构造方法的疑惑 [打印本页]

作者: jsfjb    时间: 2012-10-30 09:49
标题: 关于枚举类型构造方法的疑惑
我的代码是这样的,
public enum WeekDay{
                SUN,MON(2),TUN,SAT;
               
                private WeekDay(){
                        System.out.println("构造测试");
                }
                private WeekDay(int x){
                        System.out.println("int构造测试");
                }
               
               
        }


为什么调用:WeekDay weekday = WeekDay.MON; 后,
打印出来的是:
构造测试
int构造测试
构造测试
构造测试


为什么不是只打印:int构造测试。

看到 张老师的视频看到枚举的时候有点疑惑。 请高手指点。
作者: 小灰灰    时间: 2012-10-30 09:59
本帖最后由 都彭韬 于 2012-10-30 10:00 编辑

我猜是因为, SUN是无参数的,所以打印出“构造测试”,而MON(2)是有参数的,所以打印出,第二行int构造测试,而后两行的 “构造测试”、“构造测试”,是因为TUN,SAT;
我觉得枚举类型,是你用的时候全部已经生成好了,而不是用哪个而“实例化”哪个,要不然枚举怎么限制输入类型呢?(每一个枚举变量,都是这个枚举(类)的实例)
作者: jsfjb    时间: 2012-10-30 10:23
都彭韬 发表于 2012-10-30 09:59
我猜是因为, SUN是无参数的,所以打印出“构造测试”,而MON(2)是有参数的,所以打印出,第二行int构造测 ...

要是:“你用的时候全部已经生成好了”,的话这不是非常占内存吗?加入要用一个MON,就要初始化所有的。
作者: 小灰灰    时间: 2012-10-30 10:31
jsfjb 发表于 2012-10-30 10:23
要是:“你用的时候全部已经生成好了”,的话这不是非常占内存吗?加入要用一个MON,就要初始化所有的。 ...

enum很像特殊的class,实际上enum声明定义的类型就是一个类,而枚举值(SUN,MON(2),TUN,SAT)都是public static final的
作者: 李连闯    时间: 2012-10-30 10:46
SUN也好,MON(2)也好,都是枚举类WeekDay的成员变量,他们的默认修饰符是public static final,说明SUN等都是静态成员,
调用WeekDay,加载WeekDay类时,静态成员变量SUN等就会被初始化,所以都会打印一遍。




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