博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过反射获取类的类名,方法和内部成员变量
阅读量:6325 次
发布时间:2019-06-22

本文共 2814 字,大约阅读时间需要 9 分钟。

package cn.lonecloud.reflect;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import org.junit.Test;public class ClassUtil {	/**	 * 获取该类的信息	 * 比如他的类的类名和函数	 * @param obj	 */	public static void getClassInfo(Object obj){		//获取obj的类类型		Class c1=obj.getClass();		System.out.println("类的类型为"+c1.getName());		System.out.println("类的类型为"+c1.getSimpleName());		//获取类的类方法包括其父类的方法		Method[] methods=c1.getMethods();		System.out.println("该类的方法为");		int c=0;		for (int i = 0; i < methods.length; i++) {			c++;			Class returntype=methods[i].getReturnType();//获取该类的返回值			System.out.print(returntype.getSimpleName()+" ");//打印返回值			System.out.print(methods[i].getName()+"(");//打印方法名			Class[] prams=methods[i].getParameterTypes();//获取参数的方法			for (int j = 0; j < prams.length; j++) {				System.out.print(prams[j].getSimpleName()+"  ");//打印参数名			}			System.out.println(")");		}		System.out.println("利用getDeclaredMethods");		//获取类的本类方法,不包含父类的方法可以获取他的类里面的所有方法		Method[] methods1=c1.getDeclaredMethods();		System.out.println("该类的方法为");		int count=0;		for (int i = 0; i < methods1.length; i++) {			count++;			Class returntype=methods1[i].getReturnType();//获取该类的返回值			System.out.print(returntype.getSimpleName()+" ");//打印返回值			System.out.print(methods1[i].getName()+"(");//打印方法名			Class[] prams=methods1[i].getParameterTypes();//获取参数的方法			for (int j = 0; j < prams.length; j++) {				System.out.print(prams[j].getSimpleName()+"  ");//打印参数名			}			System.out.println(")");		}		System.out.println(c+"  "+count);	}	/**	 * 获取构造方法	 * @param obj	 */	public void getConMethod(Object obj){		Class c=obj.getClass();		//获取类的构造方法		Constructor[] declaredConstructors = c.getDeclaredConstructors();		for (Constructor constructor : declaredConstructors) {			System.out.print(constructor.getName()+"(");			Class[] parameterTypes = constructor.getParameterTypes();			for (Class class1 : parameterTypes) {				System.out.print(class1.getName());			}		}		System.out.println(")");	}	public void getClassFields(Object obj) {		Class c=obj.getClass();		//获取该类的成员变量		Field[] declaredFields = c.getDeclaredFields();		for (Field field : declaredFields) {			//获取成员变量的类型			System.out.print(field.getType().getName()+" ");			//获取成员变量的名称			System.out.println(field.getName());		}	}	public void runClassMethod(Object obj) throws Exception{		Class c1=obj.getClass();//获取类类型		/*		 * c1.getDeclaredMethod("syso", parameterTypes)		 * 第一个是方法名,第二个为参数		 */		Method m1=c1.getDeclaredMethod("de");		m1.setAccessible(true);//设置这个方法的权限为public但是不会改变该方法的原有的权限		/*		 * invoke(obj)对于指定的方法执行第一参数为这个对象,第二个为函数参数		 */		System.out.println(m1.invoke(obj));	}	@Test	public void test() throws Exception{//		String s="cewc";//		getClassInfo(s);		word w=new word();		getClassInfo(w);		getConMethod(w);		getClassFields(w);		runClassMethod(w);	}}

  

转载地址:http://qjmaa.baihongyu.com/

你可能感兴趣的文章
MD5加密解密
查看>>
.Net 转战 Android 4.4 日常笔记(6)--Android Studio DDMS用法
查看>>
SVN被锁定的几种解决方法
查看>>
js如何判断是否在iframe中及防止网页被别站用 iframe嵌套 (Load denied by X-Frame-Options)...
查看>>
ios ios7 取消控制拉升
查看>>
182在屏幕中实现网格化视图效果
查看>>
本文摘录 - FlumeJava
查看>>
Scala学习(三)----数组相关操作
查看>>
Matlab基于学习------------------函数微分学
查看>>
RHEL7 -- 修改主机名
查看>>
js中对radio和checkbox是否选中的判断
查看>>
行为型设计模式之模板方法(TEMPLATE METHOD)模式 ,策略(Strategy )模式
查看>>
android maven打包 could not find tool aapt
查看>>
移动前端调式页面--weinre
查看>>
UVa 11790 - Murcia&#39;s Skyline
查看>>
启动时创建线程并传递数据
查看>>
汉字正字表达式解决方案
查看>>
lemon OA 下阶段工作安排
查看>>
iOS UI基础-5.0 QQ框架(Storyboard)
查看>>
WCF X.509验证
查看>>