A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

反射
》反射就是把java类中的各种成分映射成相应的java类;
例如:一个java类中用一个class类得对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等信息也用一个个的java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等也是一个个类。表示java类得Class类显然要提供一些列的方法,来获取其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类得实例对象来表示,他们是Field,Method,Contructor,Package等等
>一个类中的每个成员都可以用相应的反射API类得一个实例对象来表示。通过调用Class类得方法可以得到这些实例对象后,得到这些实例对象有什么用?怎么用?这正是学习和应用反射的要点。

下面通过一个事例来说明Constructor(构造方法)反射
得到某个类得构造方法
例子:Constructor [] constructor =
Class.forName(java.lang.String).getConstructors();
得到某一个构造方法
例子:Constructor constructor=
Class.forName(java.lang.String).getConstructors(StringBuffer.class)
获得方法时要用到类型
创建实例对象
通常方式:String str = new String(new StringBuffer(abc));
反射方式:String str = (String)constructor.newInstance(new StringBuffer(abc));
调用获得的方法时,要用到上面相同类型的实例对象

实例:

这是个JavaBean类
class Person
{
private String name;
private int age;

public Person(String name,int age)
{
  this.name = name;
  this.age = age;
}

public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
public int getAge() {
  return age;
}
public void setAge(int age) {
  this.age = age;
}

}

//利用反射获得构造方法(构造方法参数什么样,反射就要穿相应的.class参数)
  Constructor constructor = Person.class.getConstructor(String.class,int.class);
  //通过构造方法获得相应的实例
  Person person = (Person)constructor.newInstance("zhangsan",25);
  
//调用实例的setName()方法;这里是姐姐调用了JavaBean的方法赋值
  person.setName("万利");


  /**
   * 利用反射原理直接给age赋值
   * 定义变量为Person中的字段age;
   * 获得属性 PropertyDescriptor
   */
  
  String propertyName = "age";//该字段不能随便写,要给那个赋值或者改变那个,就是那个字段
//获得相应的属性
  PropertyDescriptor pd = new PropertyDescriptor(propertyName,person.getClass());
//调用方法
  Method methodSetAge = pd.getWriteMethod();
//给属性赋值
  methodSetAge.invoke(person,27);
  
  
  //验证是否成功
  System.out.println(person.getName()+":"+person.getAge());  


评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马