您的位置:首页 > 编程语言 > Java开发

Java基础----反射Reflect----Constructor

2016-03-07 00:00 513 查看
获取类的构造器Constructor

在Java反射中一般方法名中包含getDelcared的方法都是只能访问该类的所有访问权限类型的构造器、方法或者成员变量和类变量,包括public、default(默认----方法名前什么都不写)、protecte、private;而其他的只能访问权限类型为public的方法或成员变量 包括继承过来的父类的public方法和成员变量、类变量,只能访问本类的public构造器方法。
a、public Constructor<?>[] getConstructors()
返回该类中所有public的构造方法

b、public Constructor<?>[] getDeclaredConstructors()
返回
Constructor
对象的一个数组,这些对象反映 此
Class
对象表示的类声明的所有构造方法。它们是公共、保护、默认(包)访问和私有构造方法

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();
}
}
}

运行结果:

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数组的构造器
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) 获取指定名称的注解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: