Java获取方法信息
本文主要获取类的信息(包括类的成员函数、成员变量)
获取类的信息
前面文章已经说过了,有三种方式,本文就不在赘述,采用其中的一种,通过实例对象.getClass()获取类类型,从而获取类的名称
Class c = obj.getClass();//传递的是哪个子类的对象,c就是该子类的类类型
c.getName()
public static void main(String[] args) {
Class c1 = int.class;
Class c2 = String.class;
Class c3 = double.class;
Class c4 = Double.class;
//void关键字 存在类类型
Class c5 = void.class;
System.out.println(c1.getName());
System.out.println(c2.getName());
//不包含包名的类名称
System.out.println(c2.getSimpleName());
System.out.println(c3.getName());
System.out.println(c4.getName());
}
其中obj是Object obj实例后的对象
成员函数(获取类的方法对象)
Method类,方法对象,一个成员方法就是一个Method对象
- 获取的是所有public的函数,包括父类继承而来的
getMethods() 方法获取的是所有public的函数,包括父类继承而来的
- 获取的是所有该类自己什么的方法
getDeclaredMethods() 获取的是所有该类自己什么的方法,不论访问权限
- 方法的返回值类型的类类型
Class returnType = ms[i].getReturnType();
- 得到方法的返回值类型的名称
returnType.getName()
- 方法的名称
ms[i].getName()
- 获取参数类型
Class[] parameterTypes = ms[i].getParameterTypes();
成员变量
成员变量也是对象,java.lang.reflect.Field, Field类封装了关于成员变量的操作
getFields()方法获取的是所有public的成员变量的信息
getDeclaredFields()获取的是该类自己声明的成员变量的信息
- 获取成员变量数组
Field[] fs = c.getDeclaredFields();
- 获取成员变量的类型名称
Class fieldType = fd.getType();
String typeName = fieldType.getName();
- 获取成员变量的名称
String fieldName = fd.getName();
完整实例
ClassUtil
public class ClassUtil {
/**
* 打印类的信息,包括类的成员函数、成员变量
*/
public static void printClassMessage(Object obj){
//要获取类的信息 首先要获取类的类类型
Class c = obj.getClass();//传递的是哪个子类的对象,c就是该子类的类类型
//获取类的名称
System.out.println("获取类的名称:"+c.getName());
/**
* Method类,方法对象
* 一个成员方法就是一个Method对象
* getMethods() 方法获取的是所有public的函数,包括父类继承而来的
* getDeclaredMethods() 获取的是所有该类自己什么的方法,不论访问权限
*/
// Method[] ms = c.getMethods();
Method[] ms = c.getDeclaredMethods();
for (int i=0;i<ms.length;i++){
//得到方法的返回值类型的类类型
Class returnType = ms[i].getReturnType();
//得到方法的返回值类型的名称
System.out.println(returnType.getName());
//得到方法的名称
System.out.print(ms[i].getName()+"(");
//获取参数类型--->得到的是参数列表的类型的类类型
//eg: string ---> 得到String.class
Class[] parameterTypes = ms[i].getParameterTypes();
for(Class c1:parameterTypes){
System.out.print(c1.getName()+",");
}
System.out.print(")");
}
/**
* 获取成员变量
* @param obj
*/
public static void printFieldMessage(Object obj){
//要获取类的信息 首先要获取类的类类型
Class c = obj.getClass();//传递的是哪个子类的对象,c就是该子类的类类型
Field[] fs = c.getDeclaredFields();
for(Field fd:fs){
//得到成员变量的类型的类类型
Class fieldType = fd.getType();
String typeName = fieldType.getName();
//得到成员变量的名称
String fieldName = fd.getName();
System.out.println(typeName+" "+fieldName);
}
}
}
所有public的函数的方法信息
public static void main(String[] args) {
String s= "hello";
ClassUtil.printClassMessage(s);
ClassUtil.printFieldMessage(s);
Integer a = 1;
ClassUtil.printClassMessage(a);
ClassUtil.printFieldMessage(a);
}
运行结果展示:
获取自己写的类的方法信息
public class ClassUtil {
/**
* 打印类的信息,包括类的成员函数、成员变量
*/
public static void printClassMessage(Object obj){
//要获取类的信息 首先要获取类的类类型
Class c = obj.getClass();//传递的是哪个子类的对象,c就是该子类的类类型
//获取类的名称
System.out.println("获取类的名称:"+c.getName());
/**
* Method类,方法对象
* 一个成员方法就是一个Method对象
* getMethods() 方法获取的是所有public的函数,包括父类继承而来的
* getDeclaredMethods() 获取的是所有该类自己什么的方法,不论访问权限
*/
// Method[] ms = c.getMethods();
Method[] ms = c.getDeclaredMethods();
for (int i=0;i<ms.length;i++){
//得到方法的返回值类型的类类型
Class returnType = ms[i].getReturnType();
//得到方法的返回值类型的名称
System.out.println(returnType.getName());
//得到方法的名称
System.out.print(ms[i].getName()+"(");
//获取参数类型--->得到的是参数列表的类型的类类型
//eg: string ---> 得到String.class
Class[] parameterTypes = ms[i].getParameterTypes();
for(Class c1:parameterTypes){
System.out.print(c1.getName()+",");
}
System.out.print(")");
}
}
public static void main(String[] args) {
ThemeInfo themeInfo = new ThemeInfo();
themeInfo.setId("1");
ClassUtil.printClassMessage(themeInfo);
ClassUtil.printFieldMessage(themeInfo);
}
}
运行结果展示:
成员方法:
成员变量: