package com.xiaojian.basics.reflect;
/**
* 使用反射的测试类
*/
public class ReflectBean {
// field
public String name;
private int age;
protected char gender;
// constructor
public ReflectBean() {
this.name = "无参";
this.age = 1;
this.gender = ‘男‘;
}
public ReflectBean(String name,Integer age){
this.name = name;
this.age = age;
}
// method
protected String getInfo(){
String info = "这个" + this.gender + "人的名字是" + this.name ;
return info;
}
private int getAge(){
return this.age;
}
@Override
public String toString() {
return "ReflectBean{" +
"name=‘" + name + ‘\‘‘ +
", age=" + age +
", gender=" + gender +
‘}‘;
}
}
package com.xiaojian.basics.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 反射
*/
public class Test {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
Class clazz = Class.forName("com.xiaojian.basics.reflect.ReflectBean");
// getFields()获取属性:只能获取public访问权限的
Field[] fields = clazz.getFields();
// getMethods()获取所有显性方法:只能获取public访问权限的
Method[] methods = clazz.getMethods();
// 获取所有显性构造器
Constructor[] constructors = clazz.getConstructors();
// 创建空构造函数对象
ReflectBean bean1 = (ReflectBean) clazz.newInstance();
System.out.println("***************无参构造函数***********************");
System.out.println(bean1.getInfo());
// 创建有参数构造函数
Constructor constructor = clazz.getConstructor(String.class,Integer.class);
ReflectBean bean2 = (ReflectBean)constructor.newInstance("小华",125);
System.out.println("***************有参构造函数***********************");
System.out.println(bean2.toString());
// 输出所有显性属性名称
System.out.println("***************属性名称***********************");
for(Field field : fields){
System.out.println(field.getName());
}
// 输出所有显性方法名称
System.out.println("***************方法名称************************");
for(Method method : methods){
System.out.println(method.getName());
}
System.out.println("///////////////////////////////////////////////////////////////////////////////////////////////// ");
// getDeclaredFields()获取所有属性
Field[] declaredFields = clazz.getDeclaredFields();
// getDeclaredMethods()获取所有方法
Method[] decalredMethods = clazz.getDeclaredMethods();
// 输出所有属性名称
System.out.println("***************所有属性名称***********************");
for(Field field : declaredFields){
System.out.println(field.getName());
}
// 输出所有方法名称
System.out.println("***************所有方法名称************************");
for(Method method : decalredMethods){
System.out.println(method.getName());
}
}
}