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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

自定义枚举中定义两个构造器,反射为什么取出三个构造器?
import java.lang.reflect.*;
enum WeekDay{
        SUN(){
                public WeekDay nextDay(){
                        return MON;
                }
        },MON(){
                public WeekDay nextDay(){
                        return SUN;
                }
        };
        WeekDay(){
                System.out.println("first");
        }
        WeekDay(int x){
                System.out.println("second");
        }
       
        public abstract WeekDay nextDay();

       
}

class Run{

        public static void main(String[] args){
                Constructor[] constructors = WeekDay.class.getDeclaredConstructors();       
                for(Constructor constructor : constructors){
                        System.out.println(constructor);
                }
        }
}

123111.JPG (13.23 KB, 下载次数: 0)

这个是运行的结果

这个是运行的结果

评分

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

查看全部评分

7 个回复

倒序浏览
原因是为了防止内存溢出

java 中   若在本类, 创建本类对象 则会造成内存溢出,简单的说就行父类中不能创建子类对象一样,父类中不能创建本类对象。

因此为了使enum 类能够创建本类对象就必须使用特殊的构造函数来创建该类的对象,以防止内存溢出

评分

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

查看全部评分

回复 使用道具 举报
First 发表于 2013-6-3 17:25
原因是为了防止内存溢出

java 中   若在本类, 创建本类对象 则会造成内存溢出,简单的说就行父类中不能创 ...

没听懂,求详解
回复 使用道具 举报
  1. public class Demo {

  2.         public static void main(String[] args) {

  3.                 Person p = new Person();
  4.                
  5.         }

  6. }

  7. class Person{
  8.         Person p = new Person();
  9.         Person(){
  10.                 System.out.println("P");
  11.         }
  12.         public String name = "name";
  13.         public int age = 18;
  14.        
  15. }
复制代码
简单的代码,

运行结果

这样是否清晰了?
不过好像单例模式下不会出现这样的情况

Capture.PNG (15.42 KB, 下载次数: 0)

Capture.PNG
回复 使用道具 举报
个人觉得。。。和enum类有关。。。。。
回复 使用道具 举报
First 发表于 2013-6-3 17:25
原因是为了防止内存溢出

java 中   若在本类, 创建本类对象 则会造成内存溢出,简单的说就行父类中不能创 ...

本类中不能创建本类对象, 那单例是是什么原因....
回复 使用道具 举报
JinnyZh 发表于 2013-6-4 01:25
本类中不能创建本类对象, 那单例是是什么原因....

因为单例是 static 的

只会创建一次
回复 使用道具 举报
楼主:
原来的观点并不完整
其中还有其他原因
具体情况请查看
关于 enmu 中的构造函数与abstract方法的关系
http://bbs.itheima.com/thread-54091-1-1.html
(出处: 黑马程序员训练营论坛)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马