黑马程序员技术交流社区

标题: 关于一个类中实例化另一个类的对象,用new,class.newInstance和 [打印本页]

作者: never615    时间: 2014-6-27 23:25
标题: 关于一个类中实例化另一个类的对象,用new,class.newInstance和
本帖最后由 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可以用暴力反射)


复制代码





作者: Lin0411    时间: 2014-6-27 23:45
用Person.class.getDeclaredConstructor()就可以了!!
作者: never615    时间: 2014-6-28 00:27
Lin0411 发表于 2014-6-27 23:45
用Person.class.getDeclaredConstructor()就可以了!!

。。。你没明白我在说什么。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2