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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© syusikoku 高级黑马   /  2014-3-8 11:47  /  920 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 syusikoku 于 2014-3-8 11:57 编辑
  1. <blockquote>各位大鸟,小弟在今天做枚举类的构造函数调用的测试的时候遇到了下面的疑惑:
复制代码

2 个回复

倒序浏览
各位大鸟,小弟在今天做枚举类的构造函数调用的测试的时候遇到了下面的疑惑:
        小弟没有弄明白,为什么枚举类对象创建的时候,里面所有的元素的构造方法都调用了?
    public static void main(String[] args) {
                //枚举类的构造方法调用测试
                //我们想知道在创建枚举类的对象的时候是调用的哪个构造方法
//                WeekDay weekday3=WeekDay.FIR;
//                System.out.println(weekday3);
                WeekDay weekMon=WeekDay.MON;
                WeekDay weekThu=WeekDay.THU;
                System.out.println(weekMon);
                System.out.println(weekThu);
        }

// 为了代码的严谨我们使用内部类的形式创建枚举类
        public enum WeekDay {
                /**
                 * 枚举:
                 *   枚举类中的每一个元素都是一个对象
                 *   枚举类中只能存放对象类型的数据。
                 *   不能存放基本数据类型
                 *   那么我们该如何枚举类中的有参的构造方法了?
                 *    我们可以在枚举元素后面加()来确定对象在创建的时候所调用的构造方法
                 */
                MON(1), THU(), WED, THI, FIR, SAT, SUN;
               
                //枚举类的构造函数的练习
                //枚举中所有的元素(方法,构造函数,和其它的信息)必须要放在元素表之后,
                //元素表之后是可以不用写;号的。如果元素表;就一定要写
                //枚举类中的构造函数是私有的
                private WeekDay(){
                        System.out.println("我是空参的构造方法");
                }
                private WeekDay(int day){
                        System.out.println("我是有参的构造方法");
                }
        }
        请各位高手帮忙指点一下,小弟不胜感激。
       还有请高手指点一下怎么修改自己发的帖子,这种修改是如果内容没有发好,想再修改一下。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
刚又看了一下张老师的视频,然后又分析了一下。解决了。分析原因如下:
  这是因为只要使用到了枚举类,里面的元素都要进行初始化。只要使用到了类,在类一加载的时候,里面的静态代码都要去执行。枚举类中的元素等效于静态的成员变量。所以类一加载的时候它就要进行初始化 。所以枚举类中的所有的成员在初始化的时候都各自的调用了它的构造函数。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马