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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李大伟 高级黑马   /  2013-3-31 15:43  /  1561 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李大伟 于 2013-4-1 14:52 编辑

定义一个标准的JavaBean,名叫Person,包含属性name、age。使用反射的方式创建一个实例、调用构造函数初始化name、age
大家能给详解下这个吗,研究半天,一点也不明白啊。

7 个回复

倒序浏览
本帖最后由 抽烟男孩 于 2013-3-31 17:45 编辑
  1. package org.lxh.demo15.instancedemo ;
  2. import java.lang.reflect.Constructor ;        // 导入反射机制包
  3. class Person{
  4.         private String name ;        // name属性
  5.         private int age ;                // age属性
  6.         public Person(String name,int age){
  7.                 this.setName(name) ;
  8.                 this.setAge(age);
  9.         }
  10.         public void setName(String name){
  11.                 this.name = name ;
  12.         }
  13.         public void setAge(int age){
  14.                 this.age = age ;
  15.         }
  16.         public String getName(){
  17.                 return this.name ;
  18.         }
  19.         public int getAge(){
  20.                 return this.age ;
  21.         }
  22.         public String toString(){        // 覆写toString()方法
  23.                 return "姓名:" + this.name + ",年龄:" + this.age  ;
  24.         }
  25. };
  26. public class InstanceDemo03{
  27.         public static void main(String args[]){
  28.                 Class<?> c = null ;                // 声明Class对象
  29.                 try{
  30.                         c = Class.forName("org.instancedemo.Person") ;//此处改为你的person类的全称
  31.                 }catch(ClassNotFoundException e){
  32.                         e.printStackTrace() ;
  33.                 }
  34.                 Person per = null ;        // 声明Person对象
  35.                 Constructor<?> cons[] = null ;
  36.                 cons = c.getConstructors() ;
  37.                 try{
  38.                         per = (Person)cons[0].newInstance("张三",30) ;        // 实例化对象
  39.                 }catch(Exception e){
  40.                         e.printStackTrace() ;
  41.                 }
  42.                 System.out.println(per) ;        // 内容输出,调用toString()
  43.         }
  44. };
复制代码
以上代码如何?
回复 使用道具 举报
本帖最后由 刘焕新 于 2013-3-31 18:47 编辑
  1. import java.lang.reflect.Constructor;

  2. //定义一个标准的JavaBean,名叫Person,包含属性name、age。
  3. class Person
  4. {
  5.         private String name;
  6.         private int age;
  7.         
  8.         Person(){}
  9.         
  10.         Person(String name, int age) {
  11.                 this.name = name;
  12.                 this.age = age;
  13.         }
  14.         
  15.         public String getName() {
  16.                 return name;
  17.         }
  18.         public void setName(String name) {
  19.                 this.name = name;
  20.         }
  21.         public int getAge() {
  22.                 return age;
  23.         }
  24.         public void setAge(int age) {
  25.                 this.age = age;
  26.         }
  27.         
  28.         @Override
  29.         public String toString() {
  30.                 return "name=" + name + ", age=" + age;
  31.         }
  32. }

  33. //使用反射的方式创建一个实例、调用构造函数初始化name、age:
  34. public class ReflectDemo {
  35.         public static void main(String[] args) throws Exception {
  36.                 //获取Person的Class对象
  37.                 Class clazz = Person.class;
  38.                 //Class clazz = Class.forName("Person");
  39.                
  40.                 //使用Person的Class对象创建一个实例,默认是调用无参的构造函数
  41.                 Person p1  = (Person)clazz.newInstance();
  42.                 System.out.println(p1);
  43.                
  44.                 //使用Person的Class对象创建一个指定参数类型列表的Constructor对象
  45.                 Constructor<Person> cons = clazz.getDeclaredConstructor(String.class, int.class);
  46.                 //使用Constructor对象,创建Person实例
  47.                 Person p2 = cons.newInstance("张三", 30);
  48.                 System.out.println(p2);
  49.         }
  50. }
复制代码
回复 使用道具 举报
抽烟男孩 发表于 2013-3-31 17:22
以上代码如何?

兄台 我看你这代码挺先进的,好几处看不懂
1  c = Class.forName("org.instancedemo.Person") ;   为什么是org.instancedemo.Person
2   Person per = null ;        // 声明Person对象
                Constructor<?> cons[] = null ;
                cons = c.getConstructors() ;
                try{
                        per = (Person)cons[0].newInstance("张三",30) ;
     为什么要这么搞呢,通过数组,还有cons[0]是什么意思呢?
这些是你自己研究的把,我在张老师视频好像没看到呀
回复 使用道具 举报
刘焕新 发表于 2013-3-31 18:40

哥们谢谢你哈,看了你这个 明白了,原来这里边传这个构造函数参数 我一直没搞明白,谢谢你了 哈,这是我的那个,把参数改了,呵呵
Constructor constructor = Person.class.getConstructor(String.class,int.class);
                Person p1 = (Person)constructor.newInstance("lisi",30);
回复 使用道具 举报
李大伟 发表于 2013-4-1 14:51
哥们谢谢你哈,看了你这个 明白了,原来这里边传这个构造函数参数 我一直没搞明白,谢谢你了 哈,这是我 ...

呵呵,我也刚学完这个不久,之前也碰到你类似的问题。我看了你的问题,我就猜到大概是我之前遇到的。
回复 使用道具 举报
刘焕新 发表于 2013-4-1 14:59
呵呵,我也刚学完这个不久,之前也碰到你类似的问题。我看了你的问题,我就猜到大概是我之前遇到的。 ...

那你学的挺快啊,我看你刚注册时间不长啊,你之前有基础吧
回复 使用道具 举报
李大伟 发表于 2013-4-1 15:44
那你学的挺快啊,我看你刚注册时间不长啊,你之前有基础吧

是的,之前学过一些,但基础不扎实。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马