Java-获取类中的构造器
需求:通过反射来获取某一个类的构造器:
1):获取该类的字节码对象.
2):从该字节码对象中去找需要获取的构造器.
------------------------------------------------------------------------
Class类获取构造器方法:
Constructor类:表示类中构造器的类型,Constructor的实例就是某一个类中的某一个构造器
public Constructor<?>[] getConstructors():该方法只能获取当前Class所表示类的public修饰的构造器
public Constructor<?>[] getDeclaredConstructors():获取当前Class所表示类的所有的构造器,和访问权限无关
public Constructor<T> getConstructor(Class<?>... parameterTypes) :获取当前Class所表示类中指定的一个public的构造器
参数:parameterTypes表示:构造器参数的Class类型
如:public User(String name)
Constructor c = clz.getConstructor(String.class);
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) :获取当前Class所表示类中指定的一个的构造
//获取指定的一个构造器的
private static void getOne() throws Exception {
//1.获取构造器所在类的字节码对象
Class<User> clz = User.class;
//2. 获取clz对象中所有的构造器
//需求1 .获取public User()
Constructor con = clz.getConstructor();
System.out.println(con);
//2.获取public User (String name)
con = clz.getConstructor(String.class);
System.out.println(con);
//需求3. 获取private User(String name ,int age)
con =clz.getDeclaredConstructor(String.class,int.class);
System.out.println(con);
}
private static void getAll() {
// 1:获取构造器所在类的字节码对象
Class<User> clz = User.class;
// 2 : 获取clz对象中的所有构造器
// public Constructor<?>[]getConstructors(),
//该方法只能获取当前Class所表示的类 public 修饰的构造器
Constructor<?>[] cs = clz.getConstructors(); // 方法后面加S的表示获取所有的,不加S表示获取单个
System.out.println(cs.length);
for (Constructor<?> c : cs) {
System.out.println(c);
}
System.out.println("================");
// public Constructor<?>[] getDeclaredConstructors(),
// 该方法只能获取当前Class所表示的类的所有构造器.和访问权限无关
cs = clz.getDeclaredConstructors();
System.out.println(cs.length);
for (Constructor<?> c : cs) {
System.out.println(c);
}
System.out.println("================");
}
class User {
public User() {
}
public User(String name) {
}
private User(String name, int age) {
}
}
共有 0 条评论