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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© nagi 中级黑马   /  2014-9-21 15:13  /  1312 人查看  /  7 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文


定义一个标准的JavaBean,名叫Person,包含属性name、age。使用反射的方式创建一个实例、调用构造函数初始化name、age,使用反射方式调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值。

答:分析

1、建立Person Bean  并且复写toString() 方法

2、通过反射Person 构造方法为属性name age 赋值

3、通过反射Person Method中的setName的方法为name 赋值

4、通过反射Person Field 中age 为age
package com.itheima;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* 定义一个标准的JavaBean,名叫Person,包含属性name、age。
* 使用反射的方式创建一个实例、调用构造函数初始化name、age,
* 使用反射方式调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值。
*  
*  分析:
*   1、建立Person Bean  并且复写toString() 方法
*   2、通过反射Person 构造方法为 属性name age 赋值
*   3、通过反射Person Method中的setName的方法为name 赋值
*   4、通过反射Person Field 中age 为age 赋值
* @author dell
*
*/
public class Test7 {

public static void main(String[] args) {
  
  Test7 test = new Test7();
  
  test.setName();
  
  test.setAge();
  
}
public Test7() {
  try {
   // 加载类
   @SuppressWarnings("unchecked")
   Class<Person> pclazz = (Class<Person>) Class.forName("com.itheima.Person");
   
   // 加载构造方法
   Constructor<Person> constructor = pclazz.getConstructor(String.class, int.class);
   
   Person person = (Person) constructor.newInstance("黑马", 21);
   
   System.out.println(person);
  } catch (Exception e) {
   
   e.printStackTrace();
  }
}
/**
  * 使用反射方式调用setName方法对名称进行设置
  */
public void setName() {
  try {
   // 加载类
   @SuppressWarnings("unchecked")
   Class<Person> pclazz = (Class<Person>) Class.forName("com.itheima.Person");
   
   // 加载构造方法
   Constructor<Person> constructor = pclazz.getConstructor();
   
   //构成出一个person 对象
   Person person = (Person) constructor.newInstance(null);
   
   //得到setName 方法
   Method method = pclazz.getMethod("setName", String.class);
   
   //设置姓名值
   method.invoke(person, "黑马");
   
   //打印出person值
   System.out.println(person);
   
  } catch (Exception e) {
   
   e.printStackTrace();
  }
}
/**
  * 不使用setAge方法直接使用反射方式对age赋值
  */
public void setAge() {
  try {
   // 加载类
   @SuppressWarnings("unchecked")
   Class<Person> clazz = (Class<Person>) Class.forName("com.itheima.Person");
   
   // 加载构造方法
   Constructor<Person> constructor = clazz.getConstructor();
   
   Person person = (Person) constructor.newInstance(null);
   
   // 得到想操作的字段
   Field a = clazz.getDeclaredField("age");
   
   // 允许反射私有方法。。
   a.setAccessible(true);
   
   // 获取字段类型。。
   Class type = a.getType();
   
   if (type.equals(int.class)) {
    // 设置年龄值
    a.set(person, 21);
   }
   //打印出person值
   System.out.println(person);
   
  } catch (Exception e) {
   
   e.printStackTrace();
  }
}
}
package com.itheima;
public class Person {
private String name;
private int 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;
}
public Person(String name, int age) {
  super();
  this.name = name;
  this.age = age;
}
public Person() {
  super();
}
@Override
public String toString() {
  return "Person: Name:\t" + name + "\t Age:\t" + age;
}
}

7 个回复

倒序浏览
zhiyuan0932 来自手机 中级黑马 2014-9-22 02:27:27
沙发
啊啊!难度不小!
回复 使用道具 举报
不系之舟王 来自手机 中级黑马 2014-9-22 07:21:37
藤椅
入学测试好难啊
回复 使用道具 举报
看着确实感觉有些难度呢~~
回复 使用道具 举报
好像挺难的
回复 使用道具 举报

算简单的,,
回复 使用道具 举报
nagi 中级黑马 2014-9-24 10:54:29
7#
zhiyuan0932 发表于 2014-9-22 02:27
啊啊!难度不小!

你应该已经进入黑马了吧!
回复 使用道具 举报
我要加把劲了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马