我是靠谱客的博主 英勇苗条,最近开发中收集的这篇文章主要介绍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();
  }

 }
}

最后

以上就是英勇苗条为你收集整理的java反射---获取类的构造方法的全部内容,希望文章能够帮你解决java反射---获取类的构造方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部