Java反射机制之获得构造函数的方法

/**
 * 只需要每天进步一点点,慢慢提升自己的level...
 */
package reflectexercise;


import java.lang.reflect.Constructor;


/**
 * @author 不负代码不负卿
 * @date 2017年9月2日
 * @description:获得其他类中的全部构造函数
 */
public class ReflectDemo2 {
public static void main(String[] args) {
Class<?> demo = null;
try {
demo = Class.forName("reflectexercise.Person");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
/**
* Constructor<?>[] getConstructors() 返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class
* 对象所表示的类的所有公共(public)构造方法。
*/
Constructor<?> constructor[] = demo.getConstructors();
System.out.println("length:"+constructor.length);
for (Constructor<?> cons : constructor) {
System.out.println("构造方法:" + cons);
}


/**
* Constructor getConstructor(Class[] params)//根据指定参数获得public构造器
*/
try {
// 设置Class对象数组,用于指定构造方法类型
Class<?> classArr []= new Class[] { String.class, int.class };
// 获得Constructor构造器对象。并指定构造方法类型
Constructor<?> cons = demo.getConstructor(classArr);
System.out.println("指定参数获得public构造器:" + cons);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}


/**
* Constructor getDeclaredConstructor(Class[]
* params)//根据指定参数获得public和非public的构造器
*/


try {
Class classArr1 [] = new Class[] { String.class, int.class,String.class };
Constructor<?> cons1 = demo.getDeclaredConstructor(classArr1);
System.out.println("指定参数获得public和非public的构造器:" + cons1);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}


/**
* Constructor[] getDeclaredConstructors()//此 Class 对象表示的类声明的所有构造方法。
*/
Constructor<?> cons2[] = demo.getDeclaredConstructors();
System.out.println("length:"+cons2.length);
for (int i = 0; i <cons2.length; i++) {
System.out.println(" Class 对象表示的类类声明的所有构造方法:" + cons2[i]);
}


}

}


/**
 * javabean
 */
package reflectexercise;


/**
 * @author 不负代码不负卿
 * @date 2017年9月2日
 * @description:
 */
public class Person {
private String name;
private int age;
private String sex;
//构造参数
public Person() {
System.out.println("----构造函数---");
}
public Person(String name,int age) {
this.name=name;
this.age=age;
}

protected Person(String name) {
this.name=name;
}

protected Person(String name,int age ,String sex) {
this.name=name;
this.age=age;
this.sex=sex;
}
//静态的参数初始化
static {
System.out.println("---静态的参数初始化---");
}
//非静态的参数初始化
{
System.out.println("----非静态的参数初始化---");
}
}


测试的结果如下:

---静态的参数初始化---
length:2
构造方法:public reflectexercise.Person()
构造方法:public reflectexercise.Person(java.lang.String,int)
指定参数获得public构造器:public reflectexercise.Person(java.lang.String,int)
指定参数获得public和非public的构造器:protected reflectexercise.Person(java.lang.String,int,java.lang.String)
length:4
 Class 对象表示的类类声明的所有构造方法:protected reflectexercise.Person(java.lang.String)
 Class 对象表示的类类声明的所有构造方法:protected reflectexercise.Person(java.lang.String,int,java.lang.String)
 Class 对象表示的类类声明的所有构造方法:public reflectexercise.Person()
 Class 对象表示的类类声明的所有构造方法:public reflectexercise.Person(java.lang.String,int)



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值