获取类的构造器Constructor
html
在Java反射中通常方法名中包含getDelcared的方法都是只能访问该类的全部访问权限类型的构造器、方法或者成员变量和类变量,包括public、default(默认----方法名前什么都不写)、protecte、private;而其余的只能访问权限类型为public的方法或成员变量 包括继承过来的父类的public方法和成员变量、类变量,只能访问本类的public构造器方法。java
a、public Constructor<?>[] getConstructors() 数组
返回该类中全部public的构造方法
spa
b、public Constructor<?>[] getDeclaredConstructors() code
返回 Constructor
对象的一个数组,这些对象反映 此 Class
对象表示的类声明的全部构造方法。它们是公共、保护、默认(包)访问和私有构造方法 orm
public class SubClass { private SubClass(){ } private SubClass(String s,String s1){ } public SubClass(String s){ } protected SubClass(int i){ } public static void main(String[] args) { try { Class clz = SubClass.class; Constructor[] cons = clz.getConstructors(); for (Constructor constructor : cons) { System.out.print(constructor.getModifiers()+"--");//权限 System.out.println(constructor.toGenericString());//构造器名称 } System.out.println("----------"); Constructor[] cons1 = clz.getDeclaredConstructors(); for (Constructor constructor : cons1) { System.out.print(constructor.getModifiers()+"--");//权限 System.out.println(constructor.toGenericString());//构造器 } } catch (Exception e) { e.printStackTrace(); } } }
运行结果:htm
1--public cn.trip.core.servlet.SubClass(java.lang.String) ---------- 4--protected cn.trip.core.servlet.SubClass(int) 1--public cn.trip.core.servlet.SubClass(java.lang.String) 2--private cn.trip.core.servlet.SubClass(java.lang.String,java.lang.String) 2--private cn.trip.core.servlet.SubClass()
同理,对象
c、public Constructor<T> getConstructor(Class<?>... parameterTypes)继承
获取该类的public构造器形参参数类型为parameterTypes数组的构造器 ip
d、public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
获取该类的private、public、protected、default类型的指定形参参数的构造器
public class SubClass { private SubClass(){ } private SubClass(String s,String s1){ } public SubClass(String s){ } protected SubClass(int i){ } public static void main(String[] args) { try { Class clz = SubClass.class; Constructor constructor = clz.getConstructor(String.class); System.out.print(constructor.getModifiers()+"--");//权限 System.out.println(constructor.toGenericString());//构造器名称 System.out.println("----------"); Constructor constructor1 = clz.getDeclaredConstructor(String.class,String.class); System.out.print(constructor1.getModifiers()+"--");//权限 System.out.println(constructor1.toGenericString());//构造器 } catch (Exception e) { e.printStackTrace(); } } }
运行结果:
1--public cn.trip.core.servlet.SubClass(java.lang.String) ---------- 2--private cn.trip.core.servlet.SubClass(java.lang.String,java.lang.String)
Constructor类中部分其余方法:
public T newInstance(Object ... initargs) 建立并初始化一个类的实例
public Annotation[] getDeclaredAnnotations() 获取构造器上的全部注解
public <T extends Annotation> T getAnnotation(Class<T> annotationClass) 获取指定名称的注解