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