黑马程序员技术交流社区

标题: 关于枚举成员变量如何加载的问题。 [打印本页]

作者: 刘源    时间: 2012-8-4 11:53
标题: 关于枚举成员变量如何加载的问题。
本帖最后由 刘源 于 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.枚举中的其他成员的构造函数也被打印出来了。

作者: 王程    时间: 2012-8-4 12:36
我们用到一个类时,需要先将类加载进去,类被加载进去的时候类里的所有静态成员变量是被自动执行的。枚举也是一个类,当执行WeekDay WeekDay2= WeekDay.TUE这条语句的时候,类会自动被发现并被加载进内存,并且对类中的所有静态变量初始化,SUN(1),MON(),TUE,WED,THT,FRI,SAT,中只有SUN(1)是用有参的构造方法创建的,所以输出了second,其他对象都是无参的构造方法创建的,输出first。
作者: 林康春    时间: 2012-8-4 13:42
1 枚举也是一个类,里面的元素可以称为:成员变量的常量,默认是静态的
  那好
  当执行WeekDay WeekDay2= WeekDay.TUE这条语句的时候,就首先加载这些常量,

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

   注意:这些常量又是成员变量





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2