先创建一个类:
publicclassUser
{
privateStringname="hui";
privateStringtel="tel";
publicString
getName() {
returnname;
}
publicvoidsetTel(Stringtel)
{
this.tel=
tel;
}
privateString
tostring() {
return"User
[name="+
name
+
", tel="
+
tel
+
"]";
}
}
利用反射获取类、调用类的方法、给类的属性赋值:
publicstaticvoidmain(String[]args)
{
try{
Class
clazz=Class.forName("com.hui.base.reflect.User");//获取整个类
Useruser=(User)clazz.newInstance();//创建此对象的一个实例
//获取属性
Field[]fields=clazz.getDeclaredFields();//获取所有属性
Fieldf=clazz.getDeclaredField("name");//获取指定名称的属性
f.setAccessible(true);//设置是否允许访问,如果为私有属性需手动设置为true
f.set(user,"John");//给指定对象的属性赋值
System.out.println(user.getName());
//获取方法
Method[]methods=clazz.getDeclaredMethods();//获取所有方法
MethodsetTel=clazz.getDeclaredMethod("setTel",String.class);//获取指定名称及参数类型的方法
Methodm=clazz.getDeclaredMethod("tostring");//获取指定名称没有参数的方法
//Method m=clazz.getMethod("tostring");//不能获取私有方法
m.setAccessible(true);//设置是否允许访问
System.out.println(m.invoke(user));
}catch(Exceptione)
{
e.printStackTrace();
}
}