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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘源 中级黑马   /  2012-8-4 11:53  /  1466 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘源 于 2012-8-4 17:26 编辑


问题已经解决”。



package cn.itcast.day1;
public class EnumTest {
public static void main(String[] args) {
   WeekDay weekDay2 =WeekDay.TUE;
  System.out.println(weekDay2);  
}
public enum WeekDay{
  SUN(1),MON(),TUE,WED,THT,FRI,SAT;
  private WeekDay(){System.out.println("frist");};
  private WeekDay(int day){
   System.out.println("second");
  };
}
}
打印结果是:
second
frist
frist
frist
frist
frist
frist
TUE
为什么,我只调用了枚举中的TUE.枚举中的其他成员的构造函数也被打印出来了。

2 个回复

倒序浏览
我们用到一个类时,需要先将类加载进去,类被加载进去的时候类里的所有静态成员变量是被自动执行的。枚举也是一个类,当执行WeekDay WeekDay2= WeekDay.TUE这条语句的时候,类会自动被发现并被加载进内存,并且对类中的所有静态变量初始化,SUN(1),MON(),TUE,WED,THT,FRI,SAT,中只有SUN(1)是用有参的构造方法创建的,所以输出了second,其他对象都是无参的构造方法创建的,输出first。
回复 使用道具 举报
1 枚举也是一个类,里面的元素可以称为:成员变量的常量,默认是静态的
  那好
  当执行WeekDay WeekDay2= WeekDay.TUE这条语句的时候,就首先加载这些常量,

  但这些常量又是成员变量,就肯定有对应的 构造函数,就必须去访问,所以对应的打印出
second
frist
frist
frist
frist
frist
frist
只有SUN(1)是用有参的构造方法创建的,所以输出了second,其他对象都是无参的构造方法创建的,输出first。
最后打印出TUE

   注意:这些常量又是成员变量
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马