您的位置:首页 > 其它

通过反射获取类的类名,方法和内部成员变量

2016-06-26 17:27 561 查看
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);
}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: