黑马程序员技术交流社区

标题: 反射实例化为什么会失败呢? [打印本页]

作者: 欧德林    时间: 2012-6-13 13:33
标题: 反射实例化为什么会失败呢?
package Test;
public class JavaBean {
public static void main(String[] args) throws Exception {
               
               
        Class<?> clazz = Class.forName("Test.Person"); //利用反射创建 实例
                Person p = (Person)clazz.newInstance();
/*问题就报在这里了。Exception in thread "main" java.lang.InstantiationException: Exam.Person
        at java.lang.Class.newInstance0(Unknown Source)
        at java.lang.Class.newInstance(Unknown Source)
        at Exam.JavaBean.main(JavaBean.java:24)           */

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

作者: 李海晓    时间: 2012-6-13 13:36
Person p = (Person)clazz.newInstance(); 使用newInstance(); 方法实例化对象时,被实例化的类中必须有一个无参的构造方法,不然就不行,你应该往Person类中加一个无参构造方法
作者: 欧德林    时间: 2012-6-13 13:42
李海晓 发表于 2012-6-13 13:36
Person p = (Person)clazz.newInstance(); 使用newInstance(); 方法实例化对象时,被实例化的类中必须有一 ...

那我直接就把 public Person(String name, int age){
                        this.age=age;
                        this.name=name;
                }
去掉?
这样编译是通过了。会不会造成什么影响呢
作者: 宋浩    时间: 2012-6-13 13:44
  1. package Test;
  2. public class JavaBean {
  3. public static void main(String[] args) throws Exception {
  4.                
  5.                
  6.         Class<?> clazz = Class.forName("Test.Person"); //利用反射创建 实例
  7.                 Person p = (Person)clazz.newInstance();
  8. }
  9. }
  10. class Person {
  11.         
  12.                 private String name;
  13.                 public String getName() {
  14.                         return name;
  15.                 }
  16.                 public void setName(String name) {
  17.                         this.name = name;
  18.                 }
  19.                 public int getAge() {
  20.                         return age;
  21.                 }
  22.                 public void setAge(int age) {
  23.                         this.age = age;
  24.                 }
  25.                 private int age;
  26.                 public Person(String name, int age){
  27.                         this.age=age;
  28.                         this.name=name;
  29.                 }
  30.                 public Person(){
  31.                         System.out.println("无参构造函数初始化对象");
  32.                 }
  33.         }
复制代码

作者: 李海晓    时间: 2012-6-13 13:46
欧德林 发表于 2012-6-13 13:42
那我直接就把 public Person(String name, int age){
                        this.age=age;
           ...

你可以不去掉啊,为什么非要去掉,加一个无参的就行了。
public person(){
}
作者: 欧德林    时间: 2012-6-13 13:51
李海晓 发表于 2012-6-13 13:46
你可以不去掉啊,为什么非要去掉,加一个无参的就行了。
public person(){
}

thank you !搞定 了、
无参构造函数----原来这里一直没想明白。
作者: 郑传庆    时间: 2012-6-13 14:03

public class JavaBean {
        public static void main(String[] args) throws Exception {

                Class<?> clazz = Class.forName("Test.Person"); // 利用反射创建 实例

                Person p = (Person) clazz.newInstance();
                p.setName("Person类");
                System.out.println(p.name);
                 
        }

}




public class Person {
        public Person() {//添加个无参的构造函数

        }

        public String name;

        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;
        }

        private int age;

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

}




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