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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 381946250 中级黑马   /  2013-5-27 17:39  /  1540 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 381946250 于 2013-5-28 09:08 编辑

public class EnumTest {

        public static void main(String[] args){
                 WeekDay sunday = WeekDay.SUN;
                 sunday.info();
         }
         
         public enum WeekDay{
                 MON,Tue,WED,THU,Fri,AST,SUN;
                 
                private WeekDay(){
                         System.out.println("调用WeekDay枚举类的构造方法");
                 }
                 
                private void info(){
                         System.out.println("调用WeekDay枚举类的info()方法");
                 }
         }
}
***********运行结果************************
调用WeekDay枚举类的构造方法
调用WeekDay枚举类的构造方法
调用WeekDay枚举类的构造方法
调用WeekDay枚举类的构造方法
调用WeekDay枚举类的构造方法
调用WeekDay枚举类的构造方法
调用WeekDay枚举类的构造方法
调用WeekDay枚举类的info()方法


****************************************
我的问题是我只在main方法里面调用SUN这一个对象。为什么枚举类里所有的对象都创建了一遍啊!!?都创建了一遍有点浪费资源吧!!

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
王溢君 来自手机 中级黑马 2013-5-27 19:17:15
沙发
枚举值就是一个实例对象。。。。。。。
回复 使用道具 举报
           我的理解是,枚举中的元素都是自己定义的,这样的话用到的可能性很大!如果再用到其他的值还要创建对象(),这样更消耗资源!一次创建完就完事了!

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 xiewen 于 2013-5-27 20:37 编辑

你这个枚举就相当于这样一个类,代码如下:
  1. final class WeekDay

  2.   {
  3. public static final WeekDay SPRING=new WeekDay();  
  4.     public static final WeekDay WINTER=new WeekDay();  
  5.     public static final WeekDay SUMMER=new WeekDay();  
  6.     public static final WeekDay AUTUMN=new WeekDay();  
  7.    ...
  8.     private Season(){...}  
  9.   }  
复制代码
看到这个代码应该就知道怎么一回事了;
                               黑马云青年为您解答





评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
袁梦希 + 1 很给力!
381946250 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在枚举类中列出枚举值时,实际上就会调用构造器创建枚举类对象,只是这里无需使用new关键字,也无需显示调用构造器。所以在你列出WeekDay的7个值时,就已经申请了相应的空间创建了相对应的对象,这是由枚举类的性质决定的,没有什么浪费资源的。
WeekDay sunday = WeekDay.SUN;     这个将SUN这个对象返回,即返回sunday。
可能表达的不是太好,希望对你有帮助!

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
袁梦希 + 1 很给力!
381946250 + 1

查看全部评分

回复 使用道具 举报
补充一下,枚举类通常被设计成不可变类,也就是说它的属性值不应该允许改变,这样会更安全,因此,通常枚举类的属性都会用private final修饰。
回复 使用道具 举报
在枚举中,MON,TUE,这些常量是等同这样建立的:
final Static WeekDay MON=new WeekDay(){};所以每个枚举常量在初始化的时候自动成为枚举类的一个匿名子类的句柄,这是java在定义枚举这类事物时如此设定的,

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
袁梦希 + 1 很给力!
381946250 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢各位,问题已解决
回复 使用道具 举报
好好学习,天天向上
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马