Constructor类: 代表某个类中的一个构造方法
1. 得到某个类所有的构造方法 ,保存在一个Constructor类型的数组中
例:Constructor[] constructor = Class.forNamme("java.lang.String").getConstructors();
2.得到某各类其中的一个构造方法,根据构造方法的参数类型和个数获取
例:Constructor constructor = Class.froName("java.lang.String").getConstructor(StringBuffer.class);
Constructor constructor = Class.froName("java.lang.String").getConstructor(StringBuffer.class, int.class);
StringBuffer.class 是该构造方法的参数类型,.getConstructor(StringBuffer.class)代表获取一个参数类型是StringBuffer的构造方法
3. newInstance()方法,获得一个类的实例对象
获得步骤:获得类Class实例对象 --> 获得Constructor构造方法 ---> 获得Object实例对象
代码实例:获取String类的实例对象
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class StringReflection {
public static void main(String []args){
/**
* 练习:用反射机制实现,获取String类对象,
*/
Class cls = null;
Constructor constructor = null;
String str = null;
try {
//1.获取String类的Class实例对象
cls = Class.forName("java.lang.String");
//2.根据参数类型,获取String类对应的构造方法
constructor = cls.getConstructor(String.class); //String.class 对象参数类型,格式是参数类型.class
//3.获取String对象,constructor.newInstance("abc")表示用该类构造方法来创建该构造方法的声明类的新实例,
//并用指定的初始化参数初始化该实例,这里编译时不知constructor是属于谁的构造方法,所以这里强制转型一下
str = (String)constructor.newInstance("abc"); //newInstance("abc") 相当于new new String("abc");
//取得str对象可以进行操作
System.out.println(str.charAt(2));
System.out.println(str);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Class类也有newInstance()方法,它返回的是无参构造函数的对象
|
|