Java 反射 ---- 获取成员变量构造函数信息

这一章我们通过Java的反射获取某个类的成员变量构造函数信息,话不多说直接上代码。

先贴工具类获取类信息的方法:

package com.blockChain;

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

public class ClassUtils {

	/**
	 * 获取类信息 成员变量构造函数信息
	 * 
	 * @param obj
	 */
	public static void printClassFieldConstructorMessage(Object obj) {
		/*
		 * 要获取类的信息 首先要获取类的类类型 Class c = obj.getClass(); 传入的是哪个子类的对象 c就是该子类的类类型
		 */
		Class c = obj.getClass();
		// 获取类名称
		System.out.println("类的名称是:" + c.getName());
		/*
		 * 成员变量也是对象 java.lang.reflect.Field Field类封装了关于成员变量的操作
		 * getFields()方法获取的是所有的public的成员变量信息 以及继承而来的public的成员变量信息
		 * getDeclaredFields()方法获取的是自己类的所有成员变量信息 不问修饰符
		 */
		Field[] fl = c.getFields();
		System.out.println("----------成员变量----------");
		for (int i = 0; i < fl.length; i++) {
			Class fieldType = fl[i].getType();
			String typeName = fieldType.getName();
			String fieldName = fl[i].getName();
			System.out.println("成员变量名称:" + fieldName + "(" + typeName + ")");
		}
		System.out.println();
		System.out.println("----------构造函数----------");
		/*
		 * 构造函数也是对象 java.lang.Constructor中封装了构造函数的信息 getConstructors()获取所有public构造函数
		 * getDeclaredConstructors获取所有构造函数
		 */
		Constructor[] con = c.getDeclaredConstructors();
		for (int i = 0; i < con.length; i++) {
			System.out.print("构造函数名称:" + con[i].getName() + "(");
			Class[] parmClass = con[i].getParameterTypes();
			for (int j = 0; j < parmClass.length; j++) {
				System.out.print(parmClass[j].getName());
				if (j != parmClass.length - 1) {
					System.out.print(",");
				}
			}
			System.out.println(")");
		}
	}

}

好了,是不感觉很简单?下面我们来编写我们的启动类:

package com.blockChain;

public class ClassDemo {

	public static void main(String[] args) {
		String i = "WangJinDuo";
		ClassUtils.printClassFieldConstructorMessage(i);
	}
	
}

大功告成,我们来看一下输出结果:

类的名称是:java.lang.String
----------成员变量----------
成员变量名称:CASE_INSENSITIVE_ORDER(java.util.Comparator)

----------构造函数----------
构造函数名称:java.lang.String([B,int,int)
构造函数名称:java.lang.String([B,java.nio.charset.Charset)
构造函数名称:java.lang.String([B,java.lang.String)
构造函数名称:java.lang.String([B,int,int,java.nio.charset.Charset)
构造函数名称:java.lang.String([B,int,int,java.lang.String)
构造函数名称:java.lang.String([C,boolean)
构造函数名称:java.lang.String(java.lang.StringBuilder)
构造函数名称:java.lang.String(java.lang.StringBuffer)
构造函数名称:java.lang.String([B)
构造函数名称:java.lang.String([I,int,int)
构造函数名称:java.lang.String()
构造函数名称:java.lang.String([C)
构造函数名称:java.lang.String(java.lang.String)
构造函数名称:java.lang.String([C,int,int)
构造函数名称:java.lang.String([B,int)
构造函数名称:java.lang.String([B,int,int,int)

如果需要获取方法信息,请看我的上一篇博文:Java 反射 ---- 获取方法信息

这样我们就获取到了该类的类信息。

小弟初来乍到如有不对的地方请大神指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值