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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陆杨 黑马帝   /  2011-8-3 16:34  /  2288 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天刚看完高新技术的15集,是张老师讲解的关于枚举的例子有点小小的疑问:
public class Enumtest {

        /**
         * @param args
         */
        public static void main(String[] args) {
                WeekDay weekday= WeekDay.MON;
        }
       
        public enum WeekDay
        {
                SUN,MON(2),TUE,WEN,THR,FRI,SAT;
                WeekDay(){System.out.println("===>first");};
                WeekDay(int day)
                {System.out.println("===>second");}
        }
}
这个是我仿造视频里写出来的代码,输出结果如下:
===>first
===>second
===>first
===>first
===>first
===>first
===>first
问题就是在main函数里只声明了一个WeekDay对象,却调用了6次枚举的构造函数,而且不论main函数里声明的是星期几,程序都是从SUN按顺序一直运行到SAT。我可不可以理解为
WeekDay weekday= WeekDay.MON;
在运行过程中从WeekDay里发现了七个成员,然后每个成员调用了一次构造函数也就是new了7个对象!

评分

参与人数 1技术分 +4 收起 理由
admin + 4 四期第1个问题,必须奖励

查看全部评分

3 个回复

倒序浏览
黑马网友  发表于 2011-8-3 22:03:17
沙发

回复 楼主 的帖子

WeekDay中定义的7个枚举常量之间使用“,”分割开来。这些常量默认都是“public static final”的,这也是为什么枚举常量采用大写字母来命名的原因。而且每一个常量都是枚举类型WeekDay的一个实例。
     只要你用到了枚举类,枚举类中的静态变量都会被初始化,在初始化的过程中,枚举常量的次序是按照声明的顺序安排的。第一个枚举常量的次序是0,依此累加。所以说初始化的构成中调用了7个构造方法(有参的和无参的),产生了7个WeekDay的实例。
   还有你说new了7个对象,不妥吧?你想想……

评分

参与人数 1技术分 +3 收起 理由
admin + 3 四期第一个回答,先给分再看了

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-4 10:52:48
藤椅
public static void main(String[] args) {
                WeekDay weekday= WeekDay.MON;
                WeekDay weekday= WeekDay.MON;

        }
我没试过,但我觉得如果你调用两次的话,可能打印结果还是一样,因为第二次已经不用再创造实例了,有IDE、的同学帮忙测试下,我现在在网吧,家里断网了
回复 使用道具 举报
黑马网友  发表于 2011-8-4 14:30:14
板凳

回复 藤椅 的帖子

嗯  试过了,不过对象的名字不能取一样,我用
WeekDay weekday= WeekDay.MON;
WeekDay weekday1= WeekDay.MON;
果然还是顺序一次。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马