黑马程序员技术交流社区
标题:
关于一个类中实例化另一个类的对象,用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