我个人对反射的理解
person中的内容
package cn.itcast_01;
public class person {
private String name;
int age;
public String address;
public person(String name,int age){
this.name=name;
this.age=age;
}
public person(){
System.out.println(“无参数的构造函数”);
}
public person(String name,int age,String address){
this.name=name;
this.age=age;
this.address=address;
}
private person(String name){
this.name=name;
}
private void show(String name){
System.out.println(“show” + name);
}
public String cat(String name,int i){
return name +”———-“ + i;
}
@Override
public String toString() {
return “person [name=” + name + “, age=” + age + “, address=” + address + “]“;
}
}
反射
A 构造方法
//person p = new person(“caobo”)相当于下面的两步
//获取的构造函数对象
Constructor con = c.getConstructor();
//通过构造函数对象生成真正的对象,根据你给的几个变量值找到对应的构造方法,obj相当于p
Object obj = c.newInstance(“caobo”);
B 成员变量
// 获取所有的成员变量
Field[] fields = c.getFields();
// 获取单个的成员变量
// 获取address并对其赋值
Field addressField = c.getField(“address”);
// 将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
addressField.set(obj, “北京”); // 给obj对象的addressField字段设置值为”北京”
//查看这个对象的值
System.out.println(obj);
C 方法
person p = new person();
p.show();
相当于下面的
// 获取单个方法并使用
// public void show(),我们自己在person中定义的方法,没有参数
// public Method getMethod(String name,Class<?>… parameterTypes)
// 第一个参数表示的方法名,第二个参数表示的是方法的参数的class类型,
Method m1 = c.getMethod(“show”);//获取没有参数的方法实例
Method m1 = c.getMethod(“show”,String.class);//获取有一个String类型参数的方法实例
// 返回值是Object接收,第一个参数表示对象是谁,第二参数表示调用该方法的实际参数,obj相当于p, 也就是person p = new person(“caobo”)
相当于p.show();
m1.invoke(obj); // 调用obj对象的m1方法
相当于p.show(“caobo”);
m1.invoke(obj,”caobo”);
还没有评论,来说两句吧...