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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张振纲 中级黑马   /  2012-8-25 21:46  /  1561 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张振纲 于 2012-8-25 21:49 编辑
  1. <IMG border=0 alt="" src="http://bbs.itheima.com/forum.php?mod=image&aid=6625&size=300x300&key=11c3fda5ed478fa85dd18f9becf18f9d&nocache=yes&type=fixnone" aid="attachimg_6625">
  2. *package com.itheima;

  3. import java.lang.reflect.*;

  4. /*题目:
  5. * 定义一个标准的JavaBean,名叫Person,包含属性name、age。使用反射的方式创建一个实例、调用构造函数初始化name、age,
  6. * 使用反射方式调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值
  7. *
  8. * author@张振纲
  9. */
  10. public class Test5 {
  11.         public static void main(String[] args) throws Exception{
  12.                 Class clazz=Class.forName("com.itheima.Person");  //加载字节码文件并创建Class对象
  13.                 Constructor c = clazz.getConstructor(String.class,int.class);
  14.                 Person p =(Person) c.newInstance("zhangsan",19);
  15.                 System.out.println(p);
  16.                
  17.                 Method set = clazz.getMethod("setName",String.class);  //通过setName方法设置
  18.                 set.invoke(p, "lisi");
  19.                
  20.                 Field age = clazz.getField("age");
  21.                 age.set(p, 29);
  22.                 System.out.println(p);
  23.         }
  24. }

  25. class Person{
  26.         @Override
  27.         public String toString() {
  28.                 return "Person [name=" + name + ", age=" + age + "]";
  29.         }

  30.         private String name;
  31.         private int age;        
  32.         
  33.         public String getName() {
  34.                 return name;
  35.         }

  36.         public void setName(String name) {
  37.                 this.name = name;
  38.         }

  39.         public int getAge() {
  40.                 return age;
  41.         }

  42.         public void setAge(int age) {
  43.                 this.age = age;
  44.         }
  45.         
  46.         Person(String name,int age){
  47.                 this.name=name;
  48.                 this.age=age;
  49.         }
  50. }
复制代码

QQ截图20120825214817.png (11.36 KB, 下载次数: 47)

QQ截图20120825214817.png

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
将Person类中的带参构造方法用public进行修饰,反射不能获取到非public的构造方法。还有那个age要使用暴力反射才能获取到,因为它是私有的。详细可以参考张老师高新技术视频。

评分

参与人数 1黑马币 +30 收起 理由
张_涛 + 30 赞一个!

查看全部评分

回复 使用道具 举报
package com.itheima.test;



import java.lang.reflect.*;

/*题目:
* 定义一个标准的JavaBean,名叫Person,包含属性name、age。使用反射的方式创建一个实例、调用构造函数初始化name、age,
* 使用反射方式调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值
*
* author@张振纲
*/
public class Test5 {
        public static void main(String[] args) throws Exception{
                Class clazz=Class.forName("com.itheima.test.Person");  //加载字节码文件并创建Class对象
               // Constructor c = clazz.getConstructor(String.class,int.class);
                Constructor c = clazz.getDeclaredConstructor(String.class,int.class);

                Person p =(Person) c.newInstance("zhangsan",19);
                System.out.println(p);
               
                Method set = clazz.getMethod("setName",String.class);  //通过setName方法设置
                set.invoke(p, "lisi");
               
                Field age = clazz.getDeclaredField("age");
               // age.set(p, 29);
                System.out.println(p);
        }
}

class Person{
        @Override
        public String toString() {
                return "Person [name=" + name + ", age=" + age + "]";
        }

        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;
        }
        
       Person(String name,int age){
                this.name=name;
                this.age=age;
        }
}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马