package Reflection;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
//通过反射,动态的创建对象
public class test03 {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
Class c1 = Class.forName("Reflection.user");
//构造一个对象
//user user1 = (user) c1.newInstance(); //本质上是调用了类的无参构造器,user必须要有无参构造器
//System.out.println(user1);
//通过构造器创建对象,user可以没有无参构造器
//Constructor declaredConstructor = c1.getDeclaredConstructor(int.class,String.class,int.class);
//user user2 = (user) declaredConstructor.newInstance(15, "yjj", 23);
//System.out.println(user2);
//通过反射调用普通方法
user user3 = (user) c1.newInstance();
//通过反射获取一个方法
Method setName = c1.getDeclaredMethod("setName", String.class);
//invoke:激活
//invoke(对象,"方法的值")
setName.invoke(user3,"yjj1");
System.out.println(user3.getName());
System.out.println("=============");
//通过反射操作属性
user user4 = (user) c1.newInstance();
Field name = c1.getDeclaredField("name");
name.setAccessible(true); //因为user中name属性是私有的,要关掉安全检测
name.set(user4,"yjj2");
System.out.println(user4.getName());
}
}
原文:https://www.cnblogs.com/YaoJingGuai/p/14340030.html