您的位置:首页 > 编程语言 > Java开发

Java中的反射与动态代理

2017-11-12 17:13 316 查看
通过一个字符串,获取这个字符串所代表的那个类的属性/方法等。

拿到字符串,不能new字符串。

拿到构造函数

//personClass是拿到之后的类
Constructor constructor=personClass.getConstructor(Long.class,String.class);

Person person=(Person) constructor.newInstance(100L,"zhangsan");

//私有的构造方法
//暴力反射
public void getPrivateConstructor() throws Exception{
//一个string类型的构造参数
Constructor con=personClass.getDeclaredConstructor(String.class);
con.setAccessible(true);
Person person2=(Person)con.newInstance("zhangsan");
System.out.println("*"+person2.getName());
}


获取非私有成员

Object obj=constructor.newInstance(100L,"zhangsan");
Field field=personClass.getField("name");
//给具体对象设置
field.set(obj,"lisi");


获取非私有成员

Object obj=constructor.newInstance(100L);
Field field2=personClass.getDeclaredField("id");
field2.setAccessible(true);
field2.set(obj,10000L);
System.out.println(field2.get(obj));


获取非私有函数

Object obj=constructor.newInstance();
//这个对象来实现这个方法。
Object object=personClass.getMethod("toString").invoke(obj);

//即:Method toStringMethod=personClass.getMethod("tostring");
Object object=toStringMethod.invoke(obj);

System.out.println(object);


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: