Java 反射:构造方法
获取构造方法
1.借助Class类某些可以获取对应类中声明的构造方法实例对象,这些方法有:
⑴Constructor[] getConstrutors():返回该Class对象表示类包含的所有public构造方法(不含继承)所对应Constructor对象数组。
⑵Constructor getConstrutor(Class<?>... parameterTypes):返回与该Class对象表示类中参数列表相匹配的public构造函数(不含继承)对应的Constructor对象。
⑶Constructor<?>[] getDeclaredConstructors():返回一个该Class对象表示类中声明的所有构造方法(不区分访问权限)对应的Constructor对象数组。
⑷Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes):返回与该Class对象表示类中定义的形参类型相匹配的构造方法(不区分访问权限)的Constructor对象。
parameterTypes的解释:
如果方法参数的数据类型为基本数据类型,则parameterType应为基本数据类型包装类.TYPE;如果方法参数的数据类型为基本数据类型包装类,则的数据类型应为包装类.class
操作构造方法——获取构造方法信息
1.通过Constructor类某些方法可以获取某个构造方法的信息,这些方法如下:
⑴Class<T> getDeclaringClass():返回声明Constructor对象对应构造方法的类的Class对象。
⑵int getModifiers():以整数形式返回Constructor对象表示的构造函数的修饰符。
⑶String getName() :以字符串形式返回Constructor对象所表示得构造方法的名称。
⑷Class<?>[] getParameterTypes():返回由Constructor对象所表示的构造方法的形参类型对应Class对象组成的数组此 。如果构造方法没有参数,则数组长度为0。
注意:
- getConstructors()和getConstructor(Class<?>... parameterTypes)方法均无法获取非public类中默认无参构造方法对应的Constructor对象。(参见代码1)
- getDeclaredConstructors()和getDeclaredConstructor(Class<?>... parameterTypes)方法可以获取非public类中默认无参构造方法对应的Constructor对象。 (参见代码2)
操作构造方法——创建对象
1.通过Constructor类某些方法可以创建对象,这些方法如下:
⑴void setAccessible(boolean flag):调用构造函数时是否忽略访问权限的影响,true表示忽略,false表示不忽略。
⑵T newInstance(Object... initargs):使用此Constructor对象表示的构造方法来创建声明该构造方法类的新对象。initargs为传入该构造方法中的参数,如果该构造方法没有参数,则可设定为null或一个长度为0的数组。
创建对象方式
1.可以通过如下三种方式创建对象
⑴通过new关键字创建对象。
⑵通过调用Constructor类的newInstance方法可以创建对象。
⑶通过调用Class类中的newInstance()方法创建对象:
T newInstance():创建此 Class类所表示类的新对象,等效于使用new关键字调用无参构造方法创建对象,如下示例: