这一章我们通过Java的反射获取某个类的成员变量构造函数信息,话不多说直接上代码。
先贴工具类获取类信息的方法:
package com.blockChain;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
public class ClassUtils {
/**
* 获取类信息 成员变量构造函数信息
*
* @param obj
*/
public static void printClassFieldConstructorMessage(Object obj) {
/*
* 要获取类的信息 首先要获取类的类类型 Class c = obj.getClass(); 传入的是哪个子类的对象 c就是该子类的类类型
*/
Class c = obj.getClass();
// 获取类名称
System.out.println("类的名称是:" + c.getName());
/*
* 成员变量也是对象 java.lang.reflect.Field Field类封装了关于成员变量的操作
* getFields()方法获取的是所有的public的成员变量信息 以及继承而来的public的成员变量信息
* getDeclaredFields()方法获取的是自己类的所有成员变量信息 不问修饰符
*/
Field[] fl = c.getFields();
System.out.println("----------成员变量----------");
for (int i = 0; i < fl.length; i++) {
Class fieldType = fl[i].getType();
String typeName = fieldType.getName();
String fieldName = fl[i].getName();
System.out.println("成员变量名称:" + fieldName + "(" + typeName + ")");
}
System.out.println();
System.out.println("----------构造函数----------");
/*
* 构造函数也是对象 java.lang.Constructor中封装了构造函数的信息 getConstructors()获取所有public构造函数
* getDeclaredConstructors获取所有构造函数
*/
Constructor[] con = c.getDeclaredConstructors();
for (int i = 0; i < con.length; i++) {
System.out.print("构造函数名称:" + con[i].getName() + "(");
Class[] parmClass = con[i].getParameterTypes();
for (int j = 0; j < parmClass.length; j++) {
System.out.print(parmClass[j].getName());
if (j != parmClass.length - 1) {
System.out.print(",");
}
}
System.out.println(")");
}
}
}
好了,是不感觉很简单?下面我们来编写我们的启动类:
package com.blockChain;
public class ClassDemo {
public static void main(String[] args) {
String i = "WangJinDuo";
ClassUtils.printClassFieldConstructorMessage(i);
}
}
大功告成,我们来看一下输出结果:
类的名称是:java.lang.String
----------成员变量----------
成员变量名称:CASE_INSENSITIVE_ORDER(java.util.Comparator)
----------构造函数----------
构造函数名称:java.lang.String([B,int,int)
构造函数名称:java.lang.String([B,java.nio.charset.Charset)
构造函数名称:java.lang.String([B,java.lang.String)
构造函数名称:java.lang.String([B,int,int,java.nio.charset.Charset)
构造函数名称:java.lang.String([B,int,int,java.lang.String)
构造函数名称:java.lang.String([C,boolean)
构造函数名称:java.lang.String(java.lang.StringBuilder)
构造函数名称:java.lang.String(java.lang.StringBuffer)
构造函数名称:java.lang.String([B)
构造函数名称:java.lang.String([I,int,int)
构造函数名称:java.lang.String()
构造函数名称:java.lang.String([C)
构造函数名称:java.lang.String(java.lang.String)
构造函数名称:java.lang.String([C,int,int)
构造函数名称:java.lang.String([B,int)
构造函数名称:java.lang.String([B,int,int,int)
如果需要获取方法信息,请看我的上一篇博文:Java 反射 ---- 获取方法信息
这样我们就获取到了该类的类信息。
小弟初来乍到如有不对的地方请大神指出。