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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jsfjb 中级黑马   /  2012-10-30 09:49  /  1454 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我的代码是这样的,
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构造测试。

看到 张老师的视频看到枚举的时候有点疑惑。 请高手指点。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 都彭韬 于 2012-10-30 10:00 编辑

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

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
都彭韬 发表于 2012-10-30 09:59
我猜是因为, SUN是无参数的,所以打印出“构造测试”,而MON(2)是有参数的,所以打印出,第二行int构造测 ...

要是:“你用的时候全部已经生成好了”,的话这不是非常占内存吗?加入要用一个MON,就要初始化所有的。
回复 使用道具 举报
jsfjb 发表于 2012-10-30 10:23
要是:“你用的时候全部已经生成好了”,的话这不是非常占内存吗?加入要用一个MON,就要初始化所有的。 ...

enum很像特殊的class,实际上enum声明定义的类型就是一个类,而枚举值(SUN,MON(2),TUN,SAT)都是public static final的
回复 使用道具 举报
SUN也好,MON(2)也好,都是枚举类WeekDay的成员变量,他们的默认修饰符是public static final,说明SUN等都是静态成员,
调用WeekDay,加载WeekDay类时,静态成员变量SUN等就会被初始化,所以都会打印一遍。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马