利用反射给类的属性赋值
package Fanshecaozuo;
import java.lang.reflect.Field;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException {
//<?>擦除数据类型
//反射创建
//获取类
Class<?> c = Class.forName("Fanshecaozuo.User");
User user = (User) c.newInstance();
//获取到name属性
Field name=c.getDeclaredField("name");
//打开访问开关默认是false
name.setAccessible(true);
//为属性赋值
name.set(user,"张三");
//获取age属性
Field age=c.getDeclaredField("age");
//打开访问开关默认是false
age.setAccessible(true);
//为属性赋值
age.set(user,23);
System.out.println("姓名"+name.get(user)+"年龄"+age.get(user));
}
}
利用反射调用默认构造和带参构造
package com.song.am;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @Author 宋伟宁
* @Date 2023/7/20
* @Version 1.0
**/
public class Test1 {
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
//带参构造创建对象
Class c= User.class;
Object obj = c.getDeclaredConstructor(String.class, Integer.class).newInstance("李四", 20);
//User obj=new User("",23);
//调用方法:无参无返回值
Method show = c.getDeclaredMethod("show");
show.invoke(obj);//回调
//obj.show();
//调用有参有返回值
Method m1= c.getDeclaredMethod("disp",String.class );
Object object = m1.invoke(obj, "哈哈");
System.out.println(object);//你好 哈哈
}
}