黑马程序员技术交流社区
标题:
关于枚举成员变量如何加载的问题。
[打印本页]
作者:
刘源
时间:
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