参考
一篇文章看懂java反射机制(反射实例化对象-反射获得构造方法,获得普通方法,获得字段属性)
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.time.LocalDateTime;
import java.util.List;
/**
* 反射的学习
* tag 反射
* 参考 javascript:void(0)
* @author yantingrui
* @date 2021/12/8 15:03
*/
public class Info {
void test(){
}
/**
* 传入包名获得class对象
*/
void test1() throws ClassNotFoundException {
Class<?> cls = Class.forName("com.koala.entity.Person"); // 取得Class对象
}
/**
* 获得对象,构造方法,普通方法,属性
*/
void test2() throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException, IllegalAccessException, InstantiationException {
Class<?> cls = Class.forName("com.koala.entity.Person"); // 取得Class对象
// 只能无参构造 有参数构造需要指定每个域的类型
Object obj = cls.newInstance(); //反射实例化对象
// 参数需要传入 所以的属性.class 这个才能有参数构造
Constructor<?> cons = cls.getConstructor(String.class, Integer.class, LocalDateTime.class, List.class);//获得构造方法
// Object obj = cons.newInstance("张三", 20); // 为构造方法传递参数
Method m3 = cls.getDeclaredMethod("getName"); //获得get方法
// m.invoke(obj);//输出123456789,这个obj可以是new出来的或newInstance出来的
Field nameField = cls.getDeclaredField("name"); // 获得name属性
// System.out.println(obj);
// System.out.println(o.toString());
System.out.println(cons);
System.out.println(m3);
System.out.println(nameField);
}
void test3(){
}
}