java 反射 访问构造方法
程序员文章站
2024-03-13 12:36:21
...
package com.fanshe.demo;
public class Example_02 {
String s;
int i,i2,i3;
private Example_02() {
}
protected Example_02(String s,int i){
this.s=s;
this.i=i;
}
public Example_02(String...strings)throws NumberFormatException{
if(0<strings.length){
i=Integer.valueOf(strings[0]);
}
if(1<strings.length){
i2=Integer.valueOf(strings[1]);
}
if(2<strings.length){
i3=Integer.valueOf(strings[2]);
}
}
public void print(){
System.out.println("s="+s);
System.out.println("i="+i);
System.out.println("i2="+i2);
System.out.println("i3="+i3);
}
}
/////////////////////////////////////////////////////////////
import java.lang.reflect.Constructor;
public class Example_01 {
/**
* @param args
*/
public static void main(String[] args) {
Example_02 example_02=new Example_02("10","20","30");
Class<? extends Example_02> class1=example_02.getClass();//获取所有权限public的类
Constructor[] constructors=class1.getDeclaredConstructors();//获取所有public构造方法返回数组
/*
*遍历Constructor有哪些公共构造函数,能传传参数吗
*/
for (int i = 0; i < constructors.length; i++) {
System.out.println("==============================\n"
+ "===========================");
// System.out.println(constructors[i]);//获取公共构造方法
Constructor<?> constructor=constructors[i];//返回构造方法
System.out.println("查看是否充许带有可变数量的参数: "+constructor.isVarArgs());
/*
* 获取构造方法里的参数并返回给Class类数组;
* 因为返回的是一个类型所以用Class接收
*/
System.out.println("构造方法的入口参数类型为");
Class[] classes= constructor.getParameterTypes();
for (int j = 0; j < classes.length; j++) {
System.out.println(classes[j]);
}
System.out.println("该构造方法可能抛出的异常为:");
//获取所有抛出的异常类信息
Class[] classes2=constructor.getExceptionTypes();
for (int j = 0; j < classes2.length; j++) {
System.out.println(j+""+classes2[j]);
}
Example_02 example_022=null;
while (example_022==null) {
try {//如果权限为私有就会异常
if (i==2) {//充许默认构造方法创建对象
//该构造方法 创建该构造方法的 声明类的新实例
//每个构造方法生成的类
example_022=(Example_02)constructor.newInstance();
}else if(i==1){//充许带有参数的创建对象
example_022=(Example_02)constructor.newInstance("7",5);
}else {//
Object[] objects=new Object[]{new String[]{"7","55","44","uf"}};
example_022=(Example_02)constructor.newInstance(objects);
}
} catch (Exception e) {
System.out.println("在创建对象时抛出异常,下面执行异常");
constructor.setAccessible(true);
}
}
if(example_022 !=null){
example_022.print();
System.out.println();
}
}
}
}