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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨剑 中级黑马   /  2013-3-15 13:08  /  2150 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 猫腻 于 2013-3-15 15:39 编辑

枚举是一个类,这个类和其他的类有什么区别呢,他可以列出很多对象,比如MON,TUE等等对象,它里面列出的是对象还是对象的引用呢?如果列出的是引用,具体的对象是那个?
下面这个例子输出结果有点不理解,为什么用了一次MON,输出 那么多次first
  1. public class EnumTest {
  2.         public static void main(String[] args) {
  3.                 System.out.println(WeekDay.MON);
  4.         }
  5.         public enum WeekDay{
  6.                 MON(1),TUE,WED,THU,FRI,SAT,SUN;
  7.                 private WeekDay(){
  8.                         System.out.println("first");
  9.                 }
  10.                 private WeekDay(int day){
  11.                         System.out.println("second");
  12.                 }
  13.         }
  14. }
复制代码
输出结果是:
second
first
first
first
first
first
first
MON

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

8 个回复

倒序浏览
枚举类的原理和单例模式的实现原理是一样的,其中的元素就是一个实例化的对象。
  1. class EnumDemo{
  2.      public static final MON =new EnumDemo(1);
  3.      public static final TUE =new EnumDemo();//调用空参数的构造方法
  4.       public static final WED =new EnumDemo();
  5.      private EnumDemo(){
  6.          System.out.println("frist");
  7.      }
  8.      private EnumDemo(int day){
  9.        System.out.println("Second");
  10.     }
  11. }
复制代码
  1. public enum WeekDay{   
  2. //执行这一句的时候,Java已经帮你完成了上面的初始化过程               
  3.   MON(1),TUE,WED,THU,FRI,SAT,SUN;
  4. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
当然有那么多个啦,你有七个对象,每个对象都要初始化,你每个初始化都有输出,所以就那么多个,
最后一个是你自己要输出的Mon
回复 使用道具 举报
枚举(enum)实际上是为一组在逻辑上密不可分的整数值提供便于记忆的符号;
  1. enum WeekDay
  2.     {
  3.            Sunday,Monday,Tuesday,Wndnesday,Thursday,Friday,Saturday
  4.     };
  5.     WeekDay day;
复制代码
枚举类型的变量在某一时刻只能取枚举某一个元素的值;

比如,day这个表示"星期"的枚举类型的变量,它的值要么是Sunday,要么是Monday或其它的星期元素,但它在一个时刻只能代表具体的某一天,不能既是星期二,又是星期三。

你那里面有这么多个变量,肯定就又这么多个输出。

因为有个MON(int)类型所以会先输出SECOND,然后就是其他普通类型的first,最后是调用的MON

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
枚举是一个类,这个类和其他的类有什么区别呢,他可以列出很多对象,比如MON,TUE等等对象,它里面列出的是对象还是对象的引用呢?如果列出的是引用,具体的对象是那个?
下面这个例子输出结果有点不理解,为什么用了一次MON,输出 那么多次first
public class EnumTest {
         
      public static void main(String[] args) {

                System.out.println(WeekDay.MON);//这句话在执行的时候,会先将WeekDay类加载到内存中,
               
               
        }

       public enum WeekDay{
                 MON(1),TUE,WED,THU,FRI,SAT,SUN;

               private WeekDay(){

                        System.out.println("first");

               }

                private WeekDay(int day){

                       System.out.println("second");
               }

        }
}

/*首先你要明白枚举的原理,
                 * 1.枚举一但被声明,那么枚举中元素的个数就是固定的,不会再发生改变。所以构造方法都必须被私有化。
                 * 2.枚举中的元素就是本类的实例对象。也就是说 MON(1),TUE,WED,THU,FRI,SAT,SUN;都是WeekDay的实例对象。
                 * 3.枚举一但被加载到内存,那么它的元素就会成存,会直接调用构造方法生成本类对象,
                 * 其中:MON(1) 调用的是   private WeekDay(int day)  {System.out.println("second");}
                 *     TUE,WED,THU,FRI,SAT,SUN 调用的是 private WeekDay(){System.out.println("first");  }
                 *     所以你的结果会先是second,然后6个first。 System.out.println(WeekDay.MON) 调用枚举toString()方法,
                 *     会输出枚举的名称WeekDay.MON。toString()的结果就是MON,
                 *  4.枚举的元素必须放在第一行,也就是默认的无参构造的前面。   
                 * */
回答:它里面列出的是对象还是对象的引用呢?如果列出的是引用,具体的对象是那个?

如果是WeekDay.MON  就相当于是这样 WeekDay day= WeekDay.MON; 你应该明白了吧!
单例你懂吧,单例中只有一个对象,而枚举中可以有多个对象,如果枚举中只放一个对象,我们就可以把它当单例用了。
————希望对你有帮助——————

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
王智威 发表于 2013-3-15 15:14
当然有那么多个啦,你有七个对象,每个对象都要初始化,你每个初始化都有输出,所以就那么多个,
最后一个 ...

每每回答问题都这样,提问没几个,能认真对待吗?
回复 使用道具 举报
杨剑 中级黑马 2013-3-15 15:49:37
7#
孙晋学 发表于 2013-3-15 14:52
枚举类的原理和单例模式的实现原理是一样的,其中的元素就是一个实例化的对象。 ...

你的意思是执行WeekDay.MON时,其他的对象都初始化,然后他们指向的对象都是新的EnumDemo对象?还是相当于EnumDemo对象,其实我那个里面每个MON,TUE,等等,都引用的是WeekDay这个对象?
回复 使用道具 举报
杨剑 中级黑马 2013-3-15 15:56:35
8#
彭颖 发表于 2013-3-15 15:22
枚举(enum)实际上是为一组在逻辑上密不可分的整数值提供便于记忆的符号;枚举类型的变量在某一时刻只能取枚 ...

哦,你说的意思是使用MON这个对象的时候,其他的对象都要进行初始化对不?指定初始化的就调用指定的构造函数是吧,最后使用MON这个值,是这么一个过程吧,那么MON,或者THU之类的,这些都引用新的对象new WeekDay()么?
回复 使用道具 举报
杨剑 中级黑马 2013-3-15 15:59:30
9#
itserious 发表于 2013-3-15 15:32
枚举是一个类,这个类和其他的类有什么区别呢,他可以列出很多对象,比如MON,TUE等等对象,它里面列出的是 ...

回答的很详细,知道了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马