黑马程序员技术交流社区

标题: Java 反射为什么要显示的声明默认构造方法 [打印本页]

作者: 李会成    时间: 2013-2-20 14:55
标题: Java 反射为什么要显示的声明默认构造方法
本帖最后由 李会成 于 2013-2-20 16:28 编辑

更位大神帮忙看一下,为什么在用方式二的时候需要显示的声明默认构造方法?????
  1. import java.lang.reflect.Field;

  2. public class Test
  3. {
  4.     public Object test(Object object) throws Exception
  5.     {
  6.         Class<?> classType = object.getClass();
  7.         // 方式一:
  8.         Object sample = Sample.class.newInstance();
  9.         // 方式二,为什么需要显示的声明默认构造方法:
  10.         //Object sample = classType.getConstructor(new Class[] {}).newInstance(new Object[] {});
  11.         Field field = classType.getDeclaredField("name");
  12.         field.set(sample, "tom");

  13.         return sample;
  14.     }

  15.     public static void main(String[] args) throws Exception
  16.     {
  17.         System.out.println(new Test().test(new Sample()));
  18.     }
  19. }

  20. class Sample
  21. {
  22.     String name;

  23.     // public Sample()
  24.     // {
  25.     //
  26.     // }

  27.     public String getName()
  28.     {
  29.         return name;
  30.     }

  31.     public void setName(String name)
  32.     {
  33.         this.name = name;
  34.     }

  35.     public String toString()
  36.     {
  37.         return this.name;
  38.     }
  39. }
复制代码

作者: 胥文    时间: 2013-2-20 15:58
getConstructor(Class<?>... parameterTypes)
          返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
用这个方法获取构造方法的时候,只能获得公共的构造方法,要想获得就就必须将构造方法Public,否则就获取不到
作者: Rancho_Gump    时间: 2013-2-20 16:09
本帖最后由 张向辉 于 2013-2-20 16:10 编辑

正如楼上所说 补充一点  默认构造方法的修饰符和本类的修饰符一致  为默认修饰符,不是public  ; 如果类修饰符是public,默认构造函数修饰符也是public
作者: Rancho_Gump    时间: 2013-2-20 16:18
本帖最后由 张向辉 于 2013-2-20 16:20 编辑

简单做了个示例:
  1. public class Jichenglx {

  2.         public static void main(String[] args) throws Exception {
  3.                 // TODO Auto-generated method stub
  4.                 //System.out.println(Class.forName("Jichenglx").newInstance());
  5.                 System.out.println(Class.forName("Jichenglx").getConstructor().newInstance());
  6.         }
  7.         @Override
  8.         public String toString() {
  9.                 // TODO Auto-generated method stub
  10.                 return "运行成功";
  11.         }

  12. }
复制代码





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