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 条评论