java反射学习(二)--得到类的信息

利用java的反射机制可以得到一个类的所有信息,下面演示怎么得到一个类的名称,成员方法,成员变量,构造方法等,还可以得到接口之类的,这里省略。。。。。

不多说,直接上代码:

package com.quan.inflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/*得到类的信息,包括类名,类的成员函数,类的成员变量
 * @param 改对象所属类的信息
 * */
/**
 * @author quan
 *
 */
public class ClassUtil {
	/*打印类的成员变量信息*/
	public static void printFieldsMessage(Object obj){
		//要获取类的信息,首先要获取类的类类型
		Class c=obj.getClass();//得到传入对象的类类型
		//获取类的名称
		System.out.println("类的名称"+c.getName());
		/*获取类的成员变量
		 * Field类,成员的类类型
		 * 一个成员函数就是一个Method的实例
		 * getFields获取的是所有的public的成员变量,包括从父类继承的
		 * getDeclaredFields获取的是该类定义的所有成员变量,不论访问权限
		 * */
		Field[] fields=c.getDeclaredFields();
		for (Field field : fields) {
			//若想得到私有属性的成员变量,需将field的setAccessible()设置为true
			field.setAccessible(true);
			//得到成员变量的类型
			Class fieldType=field.getType();
			System.out.print(fieldType.getName()+" ");
			//打印成员变量名称
			System.out.println(field.getName());
		}
	}
	
	
	/**打印类的成员函数信息
	 * @param obj
	 */
	public static void printMethodsMessage(Object obj) {
		/*万物皆对象
		 * Method类,方法的类类型
		 * 一个成员函数就是一个Method的实例
		 * getMethods获取的是所有的public的函数,包括从父类继承的
		 * getDeclaredMethods获取的是该类定义的所有方法,不论访问权限
		 * */
		Class c=obj.getClass();
		Method[] methods=c.getMethods();
		Method[] methods1=c.getDeclaredMethods();
		
		for (Method method : methods) {
			//得到方法的返回值的类类型
			Class returnType =method.getReturnType();
			System.out.print(returnType+" ");
			//得到方法的名称
			System.out.print(method.getName()+"(");
			//得到方法的参数名称的类类型
			Class[] paramsType =method.getParameterTypes();
			for (Class class1 : paramsType) {
				System.out.print(class1.getName()+",");
			}
			System.out.println(")");
			
			
		}
	}
	
	/**获取类的构造方法
	 * @param obj
	 */
	public static void printConStructorMessage(Object obj){
		Class c=obj.getClass();
		/*java.lang.reflect.Constructor封装了构造方法的操作
		 * 
		 * */
		Constructor[] constructors=c.getConstructors();
		for (Constructor constructor : constructors) {
			System.out.print(constructor.getName()+"(");
			//得到构造方法的参数,即得到参数列表的类类型
			Class[] paramTypes=constructor.getParameterTypes();
			for (Class class1 : paramTypes) {
				//打印构造方法的参数类型
				System.out.print(class1.getName()+",");
			}
			System.out.println(")");
		}
		
	}
}

还有测试类:

package com.quan.inflect;

/**
 * @author quan
 *
 */
public class Test3 {
	public static void main(String[] args){
		String s="hello";
		int i=1;
		ClassUtil.printFieldsMessage(s);
		ClassUtil.printMethodsMessage(i);
		ClassUtil.printConStructorMessage(i);
	}
}
控制台打印的结果:
类的名称java.lang.String
[C value
int offset
int count
int hash
long serialVersionUID
[Ljava.io.ObjectStreamField; serialPersistentFields
java.util.Comparator CASE_INSENSITIVE_ORDER
int hashCode()
int reverseBytes(int,)
int compareTo(java.lang.Object,)
int compareTo(java.lang.Integer,)
boolean equals(java.lang.Object,)
class java.lang.String toString(int,int,)
class java.lang.String toString(int,)
class java.lang.String toString()
class java.lang.String toHexString(int,)
class java.lang.Integer decode(java.lang.String,)
class java.lang.Integer valueOf(java.lang.String,)
class java.lang.Integer valueOf(java.lang.String,int,)
class java.lang.Integer valueOf(int,)
int reverse(int,)
byte byteValue()
double doubleValue()
float floatValue()
int intValue()
long longValue()
short shortValue()
int parseInt(java.lang.String,)
int parseInt(java.lang.String,int,)
int bitCount(int,)
class java.lang.Integer getInteger(java.lang.String,)
class java.lang.Integer getInteger(java.lang.String,int,)
class java.lang.Integer getInteger(java.lang.String,java.lang.Integer,)
int highestOneBit(int,)
int lowestOneBit(int,)
int numberOfLeadingZeros(int,)
int numberOfTrailingZeros(int,)
int rotateLeft(int,int,)
int rotateRight(int,int,)
int signum(int,)
class java.lang.String toBinaryString(int,)
class java.lang.String toOctalString(int,)
void wait()
void wait(long,int,)
void wait(long,)
class java.lang.Class getClass()
void notify()
void notifyAll()
java.lang.Integer(java.lang.String,)
java.lang.Integer(int,)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值