概述
/**
*
*/
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反射---获取类的构造方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复