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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public enum WeekDay {
  SUN(),MON(1),TUS(2),WES(3),FOU("星期四"),FRI("星期五"),STA("星期六");
  /*
   *构造函数必须是私有的,默认的,不能是public或者protecte
   *必须在成员feild的后面
   *field后面必须加分号
   */

private WeekDay(){
   System.out.println("无参的枚举构造方法");
  };
WeekDay(int i){
  System.out.println("int参数的枚举构造方法"+i);
}
private WeekDay(String str){
  System.out.println("String参数的枚举构造方法"+str);
}
}
public class EnumTest {
public static void main(String[] args) {

  WeekDay wd=WeekDay.SUN;
}
}

为什么我没有写打印语句,却在控制台出现了如下打印语句,求高人指点。
无参的枚举构造方法
int参数的枚举构造方法1
int参数的枚举构造方法2
int参数的枚举构造方法3
String参数的枚举构造方法星期四
String参数的枚举构造方法星期五
String参数的枚举构造方法星期六

我的理解是一旦枚举被调用,它里面的field被初始化,即构造方法被初始化,所以打印出了这些语句。
如果你有更深层的解答,或者更好的答案,求指教啊。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
给你贴一段张老师的模拟枚举,你应该明白吧,其实枚举的原型也就是定义了一个不可改变的唯一的子类对象,而你所进行的操作按照我们程序所执行的顺序来讲,你一加载了类生成了对象的话,构造函数就会先去执行,而你对那星期所做的操作自然而然就执行了相对应的构造函数
public abstract class  WeekDay{
        private WeekDay(){}
       
        public final static WeekDay SUN = new WeekDay(){
                public WeekDay nextDay(){
                        return MON;
                        }
        };
        public final static WeekDay MON = new WeekDay(){
                public WeekDay nextDay(){
                        return MON;
                        }
        };
        public abstract WeekDay nextDay();
       
        /*
        public WeekDay nextDay(){
                if(this == SUN){
                        return MON;
                }else{
                        return SUN;
                }
        }
        */
        public String toString(){
                return this == SUN ? "SUN":"MON";
        }
}

评分

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

查看全部评分

回复 使用道具 举报
深井看海 发表于 2012-12-10 22:23
给你贴一段张老师的模拟枚举,你应该明白吧,其实枚举的原型也就是定义了一个不可改变的唯一的子类对象,而你 ...

好像是有点明白
回复 使用道具 举报
你main方法调用WeekDay.SUN,相当于给WeekDay初始化,调用空参构造函数。
t参数的枚举构造方法1
int参数的枚举构造方法2
int参数的枚举构造方法3
String参数的枚举构造方法星期四
String参数的枚举构造方法星期五
String参数的枚举构造方法星期六

这些怎么可能会显示出来?
回复 使用道具 举报
- _奢华    发表于 2012-12-10 22:51
你main方法调用WeekDay.SUN,相当于给WeekDay初始化,调用空参构造函数。
t参数的枚举构造方法1
int参数的 ...

你试试不就知道了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马