日志文章

2020-1-2 aflfte2011

通过反射API动态操作:构造器、方法、属性

package com.aflfte.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import com.aflfte.test.bean.User;

/**
 * 通过反射API动态操作:构造器、方法、属性
 * 
 * @author jinhao
 *
 */
public class Demo03 {
public static void main(String[] args) {
String path="com.aflfte.test.bean.User";

try {
Class<?> cla=Class.forName(path);

//通过反射API调用构造方法,构造对象
User u=(User)cla.newInstance();///通过反射API直接构造对象(其实是调用的User的无参构造器方法)
System.out.println(u);
Constructor<?> c=cla.getDeclaredConstructor(int.class,int.class,String.class);
User u2=(User)c.newInstance(001,11,"张三");
System.out.println(u2.getName());

//通过反射API调用方法
User u3=(User)cla.newInstance();
Method me=cla.getDeclaredMethod("setName", String.class);
me.invoke(u3, "李四");//实现了 u3.setName("李四");
System.out.println(u3.getName());


//通过反射API操作属性
User u4=(User)cla.newInstance();
Field f=cla.getDeclaredField("name");
f.setAccessible(true);//设置私有属性也可以被调用
f.set(u4, "王五");//通过反射直接写属性
System.out.println(u4.getName());//通过反射读取属性的值
System.out.println(f.get(u4));



} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}


« 通过反射获取泛型信息 | 应用反射API,获取类的信息»