zoukankan      html  css  js  c++  java
  • 通过反射获取类的类名,方法和内部成员变量

    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);
    	}
    }
    

      

  • 相关阅读:
    centos 7常用需求
    python处理mysql的一些用法
    python下的queue
    2017-1-17不错的模块和工具
    wordpress钩子和钩子函数
    python中字典的使用
    linux下查看系统信息
    apk安全测试思路
    rhel 5.8 and 6.4 yum配置
    分布式文件系统
  • 原文地址:https://www.cnblogs.com/lonecloud/p/5618229.html
Copyright © 2011-2022 走看看