通过反射创建新类示例的两种方式及比较

来源:互联网 发布:2017年中国老龄化数据 编辑:程序博客网 时间:2024/06/05 18:45

通过反射创建新类示例的两种方式及比较

作者BLOGhttp://blog.csdn.net/fenglibing

通过反射创建新的类示例,有两种方式:

Class.newInstance()

Constructor.newInstance()

 

以下对两种调用方式给以比较说明:

l            Class.newInstance()只能够调用无参的构造函数,即默认的构造函数;而Constructor.newInstance()可以根据传入的参数,调用任意构造构造函数。

l            Class.newInstance()抛出所有由被调用构造函数抛出的异常。

l            Class.newInstance()要求被调用的构造函数是可见的,也即必须是public类型的; Constructor.newInstance() 在特定的情况下,可以调用私有的构造函数。

 

Class A(被调用的示例):

Class B(调用者):

输入结果如下:

通过Class.NewInstance()调用私有构造函数:

通过Class.NewInstance()调用私有构造函数【失败】

通过Constructor.newInstance()调用私有构造函数:

A's constructor is called.

a:5 b:6

说明方法newInstanceByClassNewInstance调用失败,而方法newInstanceByConstructorNewInstance则调用成功。如果被调用的类的构造函数为默认的构造函数,采用Class.newInstance()则是比较好的选择,一句代码就OK;如果是老百姓调用被调用的类带参构造函数、私有构造函数,就需要采用Constractor.newInstance(),两种情况视使用情况而定。不过Java Totorial中推荐采用Constractor.newInstance()

本文出自:冯立彬的博客