java反射之获取类的信息方法(推荐)
本文接上文“老生常谈反射之Class类的使用(必看篇)”,以编写一个用来获取类的信息(成员函数、成员变量、构造函数)的工具类来讲解"反射之获取类的信息"
1、获取成员函数信息
/**
*获取成员函数信息
*@paramobj
*/
publicstaticvoidprintClassMethodMessage(Objectobj){
//获取类的信息获取类的类类型
Classc=obj.getClass();
//获取类的名称
System.out.println("类的名称是:"+c.getName());
/**
*Methods类,方法对象
*一个成员方法就是一个Method对象
*getMethods()方法是获取所有public的函数,包括父类继承而来
*getDeclaredMethods()获取的是所有该类自己声明的方法,不问访问权限
*/
//Method[]ms=c.getMethods();
Method[]ms=c.getDeclaredMethods();
for(Methodm:ms){
//得到方法返回值的类类型
ClassreturnType=m.getReturnType();
System.out.print(returnType.getName()+"");
//得到方法名称
System.out.print(m.getName()+"(");
//获取参数类型(得到的是参数列表的类型的类类型)
Class[]paramTypes=m.getParameterTypes();
for(ClassparamType:paramTypes){
System.out.print(paramType.getName()+",");
}
System.out.println(")");
}
}
2、获取成员变量信息
/**
*获取成员变量信息
*@paramobj
*/
publicstaticvoidprintClassFieldMessage(Objectobj){
Classc=obj.getClass();
/**
*成员变量也是对象
*Field类封装了关于成员变量的操作
*getFields()获取的是所有的public的成员变量信息
*getDeclaredFields()获取的是该类自己声明的成员变量信息
*/
//Field[]fs=c.getFields();
Field[]fs=c.getDeclaredFields();
for(Fieldf:fs){
//得到成员变量的类型的类类型
ClassfieldType=f.getType();
StringtypeName=fieldType.getName();
//得到成员变量的名称
StringfieldName=f.getName();
System.out.println(typeName+""+fieldName);
}
}
3、获取构造函数信息
publicstaticvoidprintConMessage(Objectobj){
Classc=obj.getClass();
/**
*构造函数也是对象
*java.lang.Constructor封装了构造函数的信息
*getConstructors()获取所有的public构造函数
*getDeclaredConstructors()获取所有的构造函数
*/
//Constructor[]cs=c.getConstructors();
Constructor[]cs=c.getDeclaredConstructors();
for(Constructorconstructor:cs){
System.out.print(constructor.getName()+"(");
//获取构造函数的参数列表,得到的是参数列表的类类型
Class[]paramTypes=constructor.getParameterTypes();
for(ClassparamType:paramTypes){
System.out.print(paramType.getName()+",");
}
System.out.println(")");
}
}
4、工具类代码
packagecom.format.util;
importjava.lang.reflect.Constructor;
importjava.lang.reflect.Field;
importjava.lang.reflect.Method;
/**
*打印类的信息,成员函数、成员变量
*CreatedbyFormaton2017/6/3.
*/
publicclassClassUtil{
/**
*获取成员函数信息
*@paramobj
*/
publicstaticvoidprintClassMethodMessage(Objectobj){
//获取类的信息获取类的类类型
Classc=obj.getClass();
//获取类的名称
System.out.println("类的名称是:"+c.getName());
/**
*Methods类,方法对象
*一个成员方法就是一个Method对象
*getMethods()方法是获取所有public的函数,包括父类继承而来
*getDeclaredMethods()获取的是所有该类自己声明的方法,不问访问权限
*/
//Method[]ms=c.getMethods();
Method[]ms=c.getDeclaredMethods();
for(Methodm:ms){
//得到方法返回值的类类型
ClassreturnType=m.getReturnType();
System.out.print(returnType.getName()+"");
//得到方法名称
System.out.print(m.getName()+"(");
//获取参数类型(得到的是参数列表的类型的类类型)
Class[]paramTypes=m.getParameterTypes();
for(ClassparamType:paramTypes){
System.out.print(paramType.getName()+",");
}
System.out.println(")");
}
}
/**
*获取成员变量信息
*@paramobj
*/
publicstaticvoidprintClassFieldMessage(Objectobj){
Classc=obj.getClass();
/**
*成员变量也是对象
*Field类封装了关于成员变量的操作
*getFields()获取的是所有的public的成员变量信息
*getDeclaredFields()获取的是该类自己声明的成员变量信息
*/
//Field[]fs=c.getFields();
Field[]fs=c.getDeclaredFields();
for(Fieldf:fs){
//得到成员变量的类型的类类型
ClassfieldType=f.getType();
StringtypeName=fieldType.getName();
//得到成员变量的名称
StringfieldName=f.getName();
System.out.println(typeName+""+fieldName);
}
}
/**
*获取构造函数信息
*@paramobj
*/
publicstaticvoidprintConMessage(Objectobj){
Classc=obj.getClass();
/**
*构造函数也是对象
*java.lang.Constructor封装了构造函数的信息
*getConstructors()获取所有的public构造函数
*getDeclaredConstructors()获取所有的构造函数
*/
//Constructor[]cs=c.getConstructors();
Constructor[]cs=c.getDeclaredConstructors();
for(Constructorconstructor:cs){
System.out.print(constructor.getName()+"(");
//获取构造函数的参数列表,得到的是参数列表的类类型
Class[]paramTypes=constructor.getParameterTypes();
for(ClassparamType:paramTypes){
System.out.print(paramType.getName()+",");
}
System.out.println(")");
}
}
}
以上这篇java反射之获取类的信息方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。