java反射---获取类的构造方法



/**
 *
 */
package cn.thcic;

import java.lang.reflect.Constructor;

/**
 * java反射---获取类的构造方法
 * <p>
 * Constructor类,用于封装反射得到的类的构造器
 * </p>
 * by Zhiwang Zhang on 2014年7月21日
 */
public class Test106 {
 public int age;
 public String name;

 public Test106() {
 }

 public Test106(int age) {
  this.age = age;
 }

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

 private Test106(String name) {
  this.name = name;
  System.out.println("Private constructor...");
 }

 public static void main(String[] args) {
  // Class类有四种方法获得Constructor对象
  Class classInfomation = Test106.class;

  // 方法1:getConstructors(),返回类中所有的public构造器集合
  Constructor<Test106>[] conArr = classInfomation.getConstructors();
  System.out.println("conArr.length=" + conArr.length);
  if (conArr != null) {
   for (Constructor<Test106> con : conArr) {
    System.out.println("测试1:" + con.toString());
   }
  }
  System.out.println("默认构造器?" + conArr[2].toString());
  // 方法2: getConstructor(Class<?>...
  // parameterTypes),返回指定public构造器,参数为构造器参数类型集合
  try {
   Constructor<Test106> constructor = classInfomation
     .getConstructor(int.class);// 不传入参数得到的是默认构造方法
   // constructor.setAccessible(false);
   Test106 test = constructor.newInstance(1);
   System.out.println("test.age=" + test.age);

   Constructor<Test106> constructorSec = classInfomation
     .getConstructor(int.class, String.class);
   Test106 testSec = constructorSec.newInstance(10, "zzw");
   System.out.println("testSec.age=" + testSec.age + ","
     + "testSec.name=" + testSec.name);
  } catch (Exception e) {
   e.printStackTrace();
  }

  // 方法3:getDeclaredConstructors(),返回类中所有的构造器,包括私有
  Constructor<Test106>[] consArrSec = classInfomation
    .getDeclaredConstructors();
  System.out.println("consArrSec.length=" + consArrSec.length);
  if (consArrSec != null) {
   for (Constructor<Test106> con : consArrSec) {
    System.out.println(con.toString());
   }
  }
  // consArrSec[0].setAccessible(true);// 设置可访问权限
  try {
   Test106 testThir = consArrSec[0].newInstance("lwz");
   System.out.println("testThir.name=" + testThir.name);
  } catch (Exception e) {
   e.printStackTrace();
  }

  // 方法4:getDeclaredConstructor(Class<?>... parameterTypes),返回任意指定的构造器
  try {
   Constructor<Test106> constructorSec = classInfomation
     .getDeclaredConstructor(String.class);
   Test106 testFourth = constructorSec.newInstance("zxc");
   System.out.println("testFourth.name=" + testFourth.name);
  } catch (Exception e) {
   e.printStackTrace();
  }

 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值