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 + ‘}‘; } }
Test.java
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()); } } }
原文:https://www.cnblogs.com/jr-xiaojian/p/12145439.html