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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 never615 于 2014-7-3 12:42 编辑

一个类中实例化另一个类的对象,用new,class.newInstance和 Construction中的newInstance()的不同;

我发现的情况是这样的:我知道结果了,想知道到底怎么回事,有研究过的求告知

我建了两个类,他们在一个包中中,实际上我写在一个.java里面的 如下:我在Demo里面创建Person对象,用不同的方法,得到的结果是:

如果 Person里面的构造函数前什么都不写:(主要就是这里有的失败有的成功,是为啥?)


用Person person=new Person();                              可以成功创建对象
Constructor<Person> constructor=Person.class.getConstructor();
    Person person=constructor.newInstance();       创建失败;用Person.class.newInstance()   创建成功;  

网上说;构造函数前不写public的话默认是friendly(也就是default)的,在本包中可以调用


那为什么Constructor<Person> constructor=Person.class.getConstructor();
              Person person=constructor.newInstance();       创建失败;
   用Person.class.newInstance()   创建成功;  
class.newInstance()不是内部先得到默认的构造方法,然后用该构造方法创建实例对象。用到了缓存机制来保存默认构造方法的实例对象

谁知道原理?为什么会这样???



下面这两种明白:
如果Person里面的构造函数用public修饰  当然全部调用成功
如果是private修饰全部失败(当然Construction可以用暴力反射)


复制代码




2 个回复

倒序浏览
用Person.class.getDeclaredConstructor()就可以了!!
回复 使用道具 举报
Lin0411 发表于 2014-6-27 23:45
用Person.class.getDeclaredConstructor()就可以了!!

。。。你没明白我在说什么。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马