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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄克帅 中级黑马   /  2012-6-9 12:55  /  1439 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄克帅 于 2012-6-11 13:34 编辑

下面为什么会打印7次1111
public class Test {
        public static void main(String[] args) {
                System.out.println(WeekDay.FIR);
        }

        public enum WeekDay {
                SUM, MON, TUE, WED, THI, FIR, SAT;

                private WeekDay() {
                        System.out.println("1111");
                }

                private WeekDay(int i) {
                        System.out.println("2222");
                }
        }

}

输出结果
1111
1111
1111
1111
1111
1111
1111
FIR

4 个回复

倒序浏览
SUM, MON, TUE, WED, THI, FIR, SAT
虚拟机在加载进WeekDay类的时候会创建7个这样的WeekDay类型的对象,而调用的构造函数就是无参的,所以会先打印7次1111111
最后打印FIR是因为打印的他的toString方法了
回复 使用道具 举报
本帖最后由 唐志兵 于 2012-6-9 13:51 编辑
  1. public class Test {
  2.          public static void main(String[] args) {
  3.                  System.out.println(WeekDay.FIR);
  4.          }

  5.          public enum WeekDay {
  6.                  SUM, MON, TUE, WED, THI, FIR, SAT;
  7.                  //定义了七个对象,没有定义参数,所以调用无参构造方法,
  8.                  //7个对象调用7次,输出7个1111,然后调用 FIR对象的tostring()方法输出 FRI
  9.                  private WeekDay() {
  10.                          System.out.println("1111");
  11.                  }

  12.                  private WeekDay(int i) {
  13.                          System.out.println("2222");
  14.                  }
  15.          }

  16. }
复制代码
回复 使用道具 举报
*枚举的定义你再看一下,张老师的高新技术里面详细的讲解了枚举
枚举就是对象,每一个枚举元素都是一个对象
既然是对象的话,你在调用的时候就会对其进行初始化
因为你的枚举元素没有对其设置参数就会调用空参构造函数
  1. private WeekDay() {
  2. System.out.println("1111");
  3. }
复制代码
所以会输出七次 1111
最后WeekDay.FIR则默认调用了 toString方法  在枚举里加上这个成员方法你就会发现最后输出的是星期五
  1. public enum WeekDay
  2. {
  3. SUM, MON, TUE, WED, THI, FIR, SAT;

  4. private WeekDay() {
  5. System.out.println("1111");
  6. }

  7. private WeekDay(int i) {
  8. System.out.println("2222");
  9. }
  10. public String toString()
  11. {
  12. return "星期五";
  13. }
  14. }


复制代码
  1. public static void main(String[] args) {

  2. <DIV class=blockcode>System.out.println(WeekDay.FIR);
  3. }
  4. }
  5. </DIV>
复制代码


回复 使用道具 举报
在给楼主看一段该进的代码:
  1. public class TestEnum {
  2.         public static void main(String[] args) {
  3.                 System.out.println(WeekDay.FIR);// FIR是带参数的,说以会调用带参数的构造方法
  4.         }

  5.         public enum WeekDay {
  6.                 SUM(), MON, TUE, WED, THI, FIR(5), SAT;// SUN()和MON都是调用无参数的构造方法,打印还是1111。
  7.                 // 这些元素是存放在数组中的,打印也是按上面的顺序打印。

  8.                 private WeekDay() {
  9.                         System.out.println("1111");
  10.                 }

  11.                 private WeekDay(int i) {
  12.                         System.out.println("i=" + i);
  13.                 }
  14.         }
  15. }
复制代码
打印结果:
1111
1111
1111
1111
1111
i=5
1111
FIR
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马