本文接上文“老生常谈反射之class类的使用(必看篇)”,以编写一个用来获取类的信息(成员函数、成员变量、构造函数)的工具类来讲解"反射之获取类的信息"
1、获取成员函数信息
/**
* 获取成员函数信息
* @param obj
*/
public static void printclassmethodmessage(object obj){
//获取类的信息 获取类的类类型
class c = obj.getclass();
//获取类的名称
system.out.println("类的名称是:" + c.getname());
/**
* methods类,方法对象
* 一个成员方法就是一个method对象
* getmethods()方法是获取所有public的函数,包括父类继承而来
* getdeclaredmethods()获取的是所有该类自己声明的方法,不问访问权限
*/
// method [] ms = c.getmethods();
method [] ms = c.getdeclaredmethods();
for (method m : ms) {
//得到方法返回值的类类型
class returntype = m.getreturntype();
system.out.print(returntype.getname() + " ");
//得到方法名称
system.out.print(m.getname() + "(");
//获取参数类型(得到的是参数列表的类型的类类型)
class[] paramtypes = m.getparametertypes();
for (class paramtype : paramtypes) {
system.out.print(paramtype.getname()+",");
}
system.out.println(")");
}
}
2、获取成员变量信息
/**
* 获取成员变量信息
* @param obj
*/
public static void printclassfieldmessage(object obj) {
class c = obj.getclass();
/**
* 成员变量也是对象
* field类封装了关于成员变量的操作
* getfields()获取的是所有的public的成员变量信息
* getdeclaredfields()获取的是该类自己声明的成员变量信息
*/
// field [] fs = c.getfields();
field[] fs = c.getdeclaredfields();
for (field f : fs) {
//得到成员变量的类型的类类型
class fieldtype = f.gettype();
string typename = fieldtype.getname();
//得到成员变量的名称
string fieldname = f.getname();
system.out.println(typename+" "+fieldname);
}
}
3、获取构造函数信息
public static void printconmessage(object obj){
class c = obj.getclass();
/**
* 构造函数也是对象
* java.lang.constructor封装了构造函数的信息
* getconstructors()获取所有的public构造函数
* getdeclaredconstructors()获取所有的构造函数
*/
// constructor[] cs = c.getconstructors();
constructor[] cs = c.getdeclaredconstructors();
for (constructor constructor : cs) {
system.out.print(constructor.getname()+"(");
//获取构造函数的参数列表,得到的是参数列表的类类型
class[] paramtypes = constructor.getparametertypes();
for (class paramtype : paramtypes) {
system.out.print(paramtype.getname()+",");
}
system.out.println(")");
}
}
4、工具类代码
package com.format.util;
import java.lang.reflect.constructor;
import java.lang.reflect.field;
import java.lang.reflect.method;
/**
* 打印类的信息,成员函数、成员变量
* created by format on 2017/6/3.
*/
public class classutil {
/**
* 获取成员函数信息
* @param obj
*/
public static void printclassmethodmessage(object obj){
//获取类的信息 获取类的类类型
class c = obj.getclass();
//获取类的名称
system.out.println("类的名称是:" + c.getname());
/**
* methods类,方法对象
* 一个成员方法就是一个method对象
* getmethods()方法是获取所有public的函数,包括父类继承而来
* getdeclaredmethods()获取的是所有该类自己声明的方法,不问访问权限
*/
// method [] ms = c.getmethods();
method [] ms = c.getdeclaredmethods();
for (method m : ms) {
//得到方法返回值的类类型
class returntype = m.getreturntype();
system.out.print(returntype.getname() + " ");
//得到方法名称
system.out.print(m.getname() + "(");
//获取参数类型(得到的是参数列表的类型的类类型)
class[] paramtypes = m.getparametertypes();
for (class paramtype : paramtypes) {
system.out.print(paramtype.getname()+",");
}
system.out.println(")");
}
}
/**
* 获取成员变量信息
* @param obj
*/
public static void printclassfieldmessage(object obj) {
class c = obj.getclass();
/**
* 成员变量也是对象
* field类封装了关于成员变量的操作
* getfields()获取的是所有的public的成员变量信息
* getdeclaredfields()获取的是该类自己声明的成员变量信息
*/
// field [] fs = c.getfields();
field[] fs = c.getdeclaredfields();
for (field f : fs) {
//得到成员变量的类型的类类型
class fieldtype = f.gettype();
string typename = fieldtype.getname();
//得到成员变量的名称
string fieldname = f.getname();
system.out.println(typename+" "+fieldname);
}
}
/**
* 获取构造函数信息
* @param obj
*/
public static void printconmessage(object obj){
class c = obj.getclass();
/**
* 构造函数也是对象
* java.lang.constructor封装了构造函数的信息
* getconstructors()获取所有的public构造函数
* getdeclaredconstructors()获取所有的构造函数
*/
// constructor[] cs = c.getconstructors();
constructor[] cs = c.getdeclaredconstructors();
for (constructor constructor : cs) {
system.out.print(constructor.getname()+"(");
//获取构造函数的参数列表,得到的是参数列表的类类型
class[] paramtypes = constructor.getparametertypes();
for (class paramtype : paramtypes) {
system.out.print(paramtype.getname()+",");
}
system.out.println(")");
}
}
}
以上这篇java反射之获取类的信息方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。
希望与广大网友互动??
点此进行留言吧!