需求:通過反射來獲取某一個構(gòu)造器
1:獲取該類的字節(jié)碼對象.
2:從該字節(jié)碼對象中去尋找需要獲取的構(gòu)造器
Class類獲取構(gòu)造器方法:
Construtor類:
表示類中構(gòu)造器的類型,Construtor的實例就是某一個類中的某一個構(gòu)造器
//獲取當前Class所表示類的public修飾的構(gòu)造器.
public Contructor<?>[] getContructor(Class<?> ... parameterType);
//獲取當前Class所表示類的所有構(gòu)造器.和訪問權(quán)限無關(guān).
public Contructor<?>[] getDeclaredContructor(Class<?> ... parameterType);
//獲取當前class所表示類中指定的一個public的構(gòu)造器
//參數(shù):parametType表示:構(gòu)造器參數(shù)的Class類型
public Constructor<T> getContructor(Class<?> ... parameterTypes);
如:public User(String name)
Contructor c = clz.getConstructor(String.class);
//獲取當前Class所表示類中指定的一個構(gòu)造器
public Contructor<T> getDeclaredConstructor(Class<?> ... parameterTypes);
示例代碼
package com.java520.class01;
import java.lang.reflect.Constructor;
public class ConstructorDemo {
public static void main(String[] args) throws Exception {
Class<?> cls = Class.forName("com.java520.class01.Person");
System.out.println(cls);
getOne(cls);
//getAll(cls);
}
private static void getOne(Class<?> cls) throws Exception {
// TODO Auto-generated method stub
Constructor<?> con = cls.getConstructor();
System.out.println(con);
con = cls.getDeclaredConstructor(String.class);//無視修飾符獲取
System.out.println(con);
con = cls.getDeclaredConstructor(String.class,int.class);//無視修飾符獲取
System.out.println(con);
}
private static void getAll(Class<?> cls) {
// TODO Auto-generated method stub
Constructor<?>[] arr = cls.getConstructors();//只能獲取到使用public修飾的構(gòu)造器
for (Constructor<?> constructor : arr) {
System.out.println(constructor);
}
System.out.println("----------分隔線---------");
arr = cls.getDeclaredConstructors();//無視修飾符
for (Constructor<?> constructor : arr) {
System.out.println(constructor);
}
}
}