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

本帖最后由 阿凡提不买驴 于 2013-7-28 11:11 编辑
  1. public class EnumerationDemo{
  2. public static void main(String args[]){
  3. WeekDay weekday = WeekDay.SUN;
  4. TrafficLamp trafficlame=TrafficLamp.GREEN;
  5. System.out.println(trafficlame);
  6. System.out.println(weekday);
  7. //System.out.println(WeekDay.valueOf("MON").toString());
  8. //System.out.println(WeekDay.values().length);
  9. //System.out.println(TrafficLamp.GREEN.nextLamp());
  10. //new Date(200){};//和交通灯,子类的对象调用父类的有参构造方法
  11. }
  12. public enum WeekDay{
  13. SUN,MON,TUE,WED,THI,FRI,SAT;
  14. private WeekDay(){
  15. System.out.println("first");
  16. }
  17. private WeekDay(int day){
  18. System.out.println("second");
  19. }
  20. }
  21. public enum TrafficLamp{
  22. RED(30){
  23. @Override
  24. public TrafficLamp nextLamp() {
  25. // TODO Auto-generated method stub
  26. return GREEN;
  27. }
  28. },
  29. GREEN(45){
  30. @Override
  31. public TrafficLamp nextLamp() {
  32. // TODO Auto-generated method stub
  33. return YELLOW;
  34. }
  35. },
  36. YELLOW(5){
  37. @Override
  38. public TrafficLamp nextLamp() {
  39. // TODO Auto-generated method stub
  40. return RED;
  41. }
  42. };
  43. public abstract TrafficLamp nextLamp();
  44. private int time;
  45. private TrafficLamp(int time){
  46. this.time=time;
  47. }
  48. }
  49. }
复制代码

为什么运行结果weekday会不断调用构造方法,而trafficlamp就不会?

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

3 个回复

倒序浏览
因为楼主的WeekDay枚举类中的空参数构造方法中有打印语句。
枚举类中成员当被调用时,该枚举类被加载,而枚举类是一旦被加载就会在内部创建出来各个枚举对象,而楼主没有指定枚举类对象是否使用有参的构造方法,那么默认就会使用无参的构造方法进行对象创建,这是enum WeekDay中一共有7个对象,就相当于调用了7次构造方法,每次都执行了一次构造方法中的打印语句。

则运行结果就会打印出来7次first。

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
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随便写个数字就行),你再试试,你想要的结果就出来了。

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
O(∩_∩)O谢谢,问题得到解决了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马