我个人对反射的理解

今天药忘吃喽~ 2022-09-21 11:54 257阅读 0赞

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”);

发表评论

表情:
评论列表 (有 0 条评论,257人围观)

还没有评论,来说两句吧...

相关阅读

    相关 关于Field简单理解

    今天在苏州,没事闲着写下自己的一份博客,自己在看代码的时候遇到问题就喜欢总结,希望有一天能成为像郭大神鸿洋这样的大神! 进入今天的正题 1.怎么通过反射获取类的属性