本帖最后由 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可以用暴力反射)
|
|