1. 首先把要测试类的放出来。里面包含了成员变量以及构造函数:
- public class TestClass {
- public String name = "";
- public int age = 2;
- public double height = 2.2;
- private String address = "";
- float salary;
- public TestClass() {
- }
- public TestClass(String name, int age, double height) {
- }
- }
2. 下面是获得成员变量以及构造函数的方法:
- public class ClassUtil {
- /**获取类中的成员变量
- * @param obj
- */
- public static void getClassFieldUseGetFields(Object obj) {
- Class c = obj.getClass();
- System.out.println("当前类的名称为:" + c.getName());
- System.out.println("类中的成员变量有:");
- Field[] fields = c.getFields();// 使用这个方法获得的是 public 的方法
- // 使用 Modifier.toString(field.getModifiers()) 方法可以获得变量的修饰符:public private 等
- for (Field field : fields) {
- System.out.println(Modifier.toString(field.getModifiers()) + " " + field.getGenericType() + " " + field.getName() + "");
- }
- }
- /**
- * 获取类中的成员变量
- * @param obj
- */
- public static void getClassFieldUseGetDeclaredFields(Object obj) {
- Class c = obj.getClass();
- System.out.println("当前类的名称为:" + c.getName());
- System.out.println("类中的成员变量有:");
- Field[] fields = c.getDeclaredFields();// 使用这个方法获得的是类里面所有的自己定义的变量
- // 使用 Modifier.toString(field.getModifiers()) 方法可以获得变量的修饰符:public private 等
- for (Field field : fields) {
- System.out.println(Modifier.toString(field.getModifiers()) + " " + field.getType() + " " + field.getName() + "");
- }
- }
- /**
- * 获取类中的构造方法
- * @param obj
- */
- public static void getClassConInfo(Object obj) {
- Class c = obj.getClass();
- Constructor[] con = c.getConstructors();
- for (Constructor constructor : con) {
- System.out.print(Modifier.toString(constructor.getModifiers()) + " " + constructor.getName() + "(");
- Class[] parameterType = constructor.getParameterTypes();
- for (Class class1 : parameterType) {
- System.out.print(class1.getName()+",");
- }
- System.out.print(")");
- System.out.println("");
- }
- }
- }
3. 运行代码:
- public static void main(String[] args) {
- TestClass t = new TestClass();
- System.out.println("使用 GetField-----------------------------------");
- ClassUtil.getClassFieldUseGetFields(t);
- System.out.println("使用 GetDeclared-----------------------------------");
- ClassUtil.getClassFieldUseGetDeclaredFields(t);
- System.out.println("获得类的构造方法的信息-----------------------------------");
- ClassUtil.getClassConInfo(t);
- }
4. 运行结果:
测试代码
- 当前类的名称为:cn.sumile.TestClass
- 类中的成员变量有:
- public class java.lang.String name
- public int age
- public double height
- 使用 GetDeclared-----------------------------------
- 当前类的名称为:cn.sumile.TestClass
- 类中的成员变量有:
- public class java.lang.String name
- public int age
- public double height
- private class java.lang.String address
- float salary
- 获得类的构造方法的信息-----------------------------------
- public cn.sumile.TestClass()
- public cn.sumile.TestClass(java.lang.String,int,double,)
转载请注明:热爱改变生活.cn » 反射获得类的成员变量以及构造方法——反射_3
本博客只要没有注明“转”,那么均为原创。 转载请注明链接:sumile.cn » 反射获得类的成员变量以及构造方法——反射_3