黑马程序员技术交流社区

标题: 为什么会挂掉 [打印本页]

作者: 张振纲    时间: 2012-8-25 21:46
标题: 为什么会挂掉
本帖最后由 张振纲 于 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, 下载次数: 44)

QQ截图20120825214817.png

作者: 唐见    时间: 2012-8-25 21:59
将Person类中的带参构造方法用public进行修饰,反射不能获取到非public的构造方法。还有那个age要使用暴力反射才能获取到,因为它是私有的。详细可以参考张老师高新技术视频。
作者: 杨鹏鹏    时间: 2012-8-25 22:07
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;
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2