黑马程序员技术交流社区
标题:
枚举小问题,O(∩_∩)O谢谢,求指教?
[打印本页]
作者:
阿凡提不买驴
时间:
2013-7-27 22:44
标题:
枚举小问题,O(∩_∩)O谢谢,求指教?
本帖最后由 阿凡提不买驴 于 2013-7-28 11:11 编辑
public class EnumerationDemo{
public static void main(String args[]){
WeekDay weekday = WeekDay.SUN;
TrafficLamp trafficlame=TrafficLamp.GREEN;
System.out.println(trafficlame);
System.out.println(weekday);
//System.out.println(WeekDay.valueOf("MON").toString());
//System.out.println(WeekDay.values().length);
//System.out.println(TrafficLamp.GREEN.nextLamp());
//new Date(200){};//和交通灯,子类的对象调用父类的有参构造方法
}
public enum WeekDay{
SUN,MON,TUE,WED,THI,FRI,SAT;
private WeekDay(){
System.out.println("first");
}
private WeekDay(int day){
System.out.println("second");
}
}
public enum TrafficLamp{
RED(30){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return GREEN;
}
},
GREEN(45){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return YELLOW;
}
},
YELLOW(5){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){
this.time=time;
}
}
}
复制代码
QQ截图20130727224318.png
(4.93 KB, 下载次数: 0)
下载附件
2013-7-27 22:43 上传
为什么运行结果weekday会不断调用构造方法,而trafficlamp就不会?
作者:
王磊
时间:
2013-7-27 23:06
因为楼主的WeekDay枚举类中的空参数构造方法中有打印语句。
枚举类中成员当被调用时,该枚举类被加载,而枚举类是一旦被加载就会在内部创建出来各个枚举对象,而楼主没有指定枚举类对象是否使用有参的构造方法,那么默认就会使用无参的构造方法进行对象创建,这是enum WeekDay中一共有7个对象,就相当于调用了7次构造方法,每次都执行了一次构造方法中的打印语句。
则运行结果就会打印出来7次first。
作者:
诸隆隆
时间:
2013-7-28 08:42
public class EnumerationDemo{
public static void main(String args[]){
WeekDay weekday = WeekDay.SUN; //本行打印7个first
TrafficLamp trafficlame=TrafficLamp.GREEN;
System.out.println(trafficlame); //本行打印green
System.out.println(weekday); //本行答应的是sun
你注意到没有,你weekday中两个构造,第二个十带参的,是(int day),但是,你所有的元素都是不带参的,SUN MON等后面都没有(),如果你写成SUN(1随便写个数字就行),你再试试,你想要的结果就出来了。
作者:
阿凡提不买驴
时间:
2013-7-28 11:10
O(∩_∩)O谢谢,问题得到解决了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2