黑马程序员技术交流社区

标题: 反射—调用构造函数,发生异常!!求解 [打印本页]

作者: 赵许星    时间: 2013-11-17 16:36
标题: 反射—调用构造函数,发生异常!!求解
本帖最后由 赵许星 于 2013-11-21 21:28 编辑

  1. //反射
  2. package com.itheima;

  3. import java.lang.reflect.Constructor;
  4. import java.lang.reflect.InvocationTargetException;

  5. public class Test8 {
  6.         
  7.         public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
  8.                
  9.                 //类的字节码               
  10.                 //第一种 获取默认构造函数
  11.                 System.out.println(Class.forName("com.itheima.Student")+"-----"+Student.class);
  12.                 ((Student) Class.forName("com.itheima.Student").newInstance()).printInfo();
  13.                
  14.                 //第二种获取指构造函数
  15.                 Constructor constructor =  Class.forName("com.itheima.Student").getConstructor(String.class,String.class);
  16.                 Student student = (Student) constructor.newInstance("zhang","23");  //为何报错!!!!!
  17.                 student.printInfo();
  18.         }

  19. }

  20. class Student{
  21.         private String name;
  22.         private String age;
  23.         
  24.         Student()
  25.         {
  26.                 name="defined";
  27.                 age="0";
  28.         }
  29.         Student(String name,String age)
  30.         {
  31.                 this.name = name;
  32.                 this.age = age;
  33.         }        
  34.         void printInfo()
  35.         {
  36.                 System.out.println("姓名:"+name+"  年龄:"+age);
  37.         }
  38. }


  39. /*
  40. *
  41. *          1、类名.class;例如:System.class;

  42.         2、对象.getClass(),例如:new Stirng(“abc”).getClass();

  43.         3、Class.forName(“类名”),例如:Class.forName(“java.lang.String”);
  44. * */
复制代码

大家把代码拷贝一下,运行试试,
Constructor constructor =  Class.forName("com.itheima.Student").getConstructor(String.class,String.class);

作者: 零下五度的水    时间: 2013-11-17 16:54
你的那个构造方法不是public的。。。用getDeclaredConstructor吧。。。




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