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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李会成 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

4 个回复

倒序浏览
getConstructor(Class<?>... parameterTypes)
          返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
用这个方法获取构造方法的时候,只能获得公共的构造方法,要想获得就就必须将构造方法Public,否则就获取不到

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
本帖最后由 张向辉 于 2013-2-20 16:10 编辑

正如楼上所说 补充一点  默认构造方法的修饰符和本类的修饰符一致  为默认修饰符,不是public  ; 如果类修饰符是public,默认构造函数修饰符也是public
回复 使用道具 举报
本帖最后由 张向辉 于 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. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马