Java获取类的方法、成员变量、构造器信息

想要获得一个类的所有信息(比如类中存在的方法、成员变量、构造器等),首先的一步是获取该对象的类的类类型–>

Class c = obj.getClass(); //第一步

获取了对象的类的类类型之后

1、获取该类的方法

getMethods(); // 获取该类的所有方法
getDeclaredMethods(); //仅获取该类声明的方法

通过以上方法可以获取到方法列表,对于列表中的每一个方法method,可以通过

Class c2 = method.getReturnType()

来获取该方法返回值对象的类类型,通过

Class []paramTypes = method.getParameterTypes();

来获取参数列表。

2、获取该类的成员变量

getFields(); // 获取该类的所有方法
getDeclaredFields(); // 获取该类中自己声明的方法

通过以上方法可以获取方法列表,对于列表的每一个成员变量 field,可以通过

Class fieldType = field.getType();

获取变量类型

3、获取该类的构造器

getConstructor()// 获取该类中所有构造函数
getDeclaredConstructor();  // 获取该类中自己声明的构造函数

通过以上方法可以获取构造函数列表,对于列表的每一个构造器constructor,可以通过

Class []paramTypes = method.getParameterTypes();

来获取参数列表。

tips:想要获取类的信息,最基本的操作应该是先获取的该类的类型

package com.immoc.util;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ClassUtil {
	/**
	 * 获取类的方法信息
	 * @param obj 对象信息
	 */
	public static void getMethodsMessage(Object obj) {
		Class c = obj.getClass(); // 获取obj的类的类类型
		System.out.println("类的全称:" + c.getName());
		
		/**
		 * 获取类的方法信息
		 * getMethods()方法获取类的所有方法,包括从父类继承的方法
		 * getDeclaredMethods()方法获取类中自己声明的方法
		 */
		Method []methods = c.getMethods();
		//Method []methods2 = c.getDeclaredMethods();
		System.out.print("方法:");
		for(int i = 0; i < methods.length; i++) {
			// 获得返回值类型的类类型
			Class returnType = methods[i].getReturnType();
			System.out.print(returnType.getSimpleName() + " ");
			System.out.print(methods[i].getName() + "(");
			// 获得方法的参数列表的类的类类型
			Class []parameterType = methods[i].getParameterTypes();
			for (Class class1 : parameterType) {
				System.out.print(class1.getName() + " ");
			}
			System.out.println(")");
		}
	}
	
	/**
	 * 获取成员变量的信息
	 * @param obj
	 */
	public static void getFieldsMessage(Object obj) {
		// 获取obj对象的类的类类型
		Class class1 = obj.getClass();
		/*
		 *  获取该类的所有成员变量
		 *  getField()获取所有成员变量
		 *  getDeclaredField()获取该类自己声明的变量
		 */
		Field []fields = class1.getFields();
		// Field []fields2 = class1.getDeclaredFields();
		System.out.println("成员变量:");
		for (Field field : fields) {
			// 获取该成员变量的类的类类型
			Class fieldType = field.getType();
			System.out.print(fieldType.getSimpleName() + " ");
			System.out.println(field.getName());
		}
	}
	/**
	 * 获取构造函数的信息
	 * @param obj
	 */
	public static void getConMessage(Object obj) {
		// 获取obj对象的类类型
		Class class1 = obj.getClass();
		
		// 构造函数也是对象,获取构造函数对象列表
		//Constructor[]constructors = class1.getDeclaredConstructors();
		Constructor[]constructors = class1.getConstructors();
		System.out.println("构造器有:");
		for (Constructor constructor : constructors) {
			// 获取参数列表的类类型
			Class[] paramTypes = constructor.getParameterTypes();
			System.out.print(constructor.getName() + "(");
			for (Class class2 : paramTypes) {
				System.out.print(class2.getSimpleName() + ",");
			}
			System.out.println(")");
		}
	}
}
package com.immoc.reflect;

import com.immoc.util.ClassUtil;
/**
 * 测试获取类的方法信息
 */
public class ClassDemo1 {
	public static void main(String []args) {
		String s = "hello";
		ClassUtil.getMethodsMessage(s);
	}
}
package com.immoc.reflect;

import com.immoc.util.ClassUtil;
/**
 * 测试获取类的成员变量信息
 */
public class ClassDemo2 {
	public static void main(String []args) {
		ClassUtil.getFieldsMessage(new Integer(1));
	}
}
package com.immoc.reflect;

import com.immoc.util.ClassUtil;
/**
 * 测试获取类的构造器信息
 */
public class ClassDemo3 {
	public static void main(String[] args) {
		ClassUtil.getConMessage("Hello");
	}
}

猜你喜欢

转载自blog.csdn.net/innocent_jia/article/details/89039886