反射获取构造器对象:
package com.gao.reflect_constructor;
import org.junit.Test;
import java.lang.reflect.Constructor;
public class StudentDemo1 {
@Test
public void getConstructors(){
//1. 先获取类对象
Class c=Student.class;
//提取类中的全部构造器对象
Constructor[] constructors = c.getConstructors();
//遍历构造器
for (Constructor constructor : constructors) {
System.out.println(constructor + "======>"+constructor.getName()
+ "======>"+constructor.getParameterCount());
}
}
}
定位某个有参构造器,将参数类型的类型带上:
得到构造器后再来创建对象:
得到构造器,并且利用构造器获得了对象
package com.gao.reflect_constructor;
import org.junit.Test;
import java.lang.reflect.Constructor;
public class StudentDemo2 {
@Test
public void getConstructors() throws Exception {
//获取类对象
Class cs = Student.class;
// 获取无参构造器
Constructor con1 = cs.getDeclaredConstructor();
System.out.println(con1 +"=====>>"+ con1.getName() + "======>>"+ con1.getParameterCount());
//创建对象
con1.setAccessible(true); // 权限被打开 因为构造器时私有的,打通私有
Student student = (Student) con1.newInstance();
System.out.println(student);
System.out.println("====================");
// 获得有参构造器
Constructor declaredConstructor = cs.getDeclaredConstructor(String.class, String.class);
System.out.println(declaredConstructor + "=====>>"+ declaredConstructor.getName()+"=====>>"+ declaredConstructor.getParameterCount());
Student student1 = (Student) declaredConstructor.newInstance("高勇", "男");
System.out.println(student1);
}
}
反射获取成员变量对象:
反射获取方法对象
注意:方法如果没有返回值,会返回null