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,获取类的信息»
|