zoukankan      html  css  js  c++  java
  • Java反射【三、方法的反射】

    获取一个类下的所有方法

    可以获取类类型后,获取到所有方法及相关信息

    • Method[] ms = c.getMethods(); 获取方法列表(public)
    • Method[] ms = c.getDeclaredMethods(); 获取所有声明了的方法列表
    • Class c = m.getReturnType(); 获取返回值类型
    • String name = m.getName(); 获取方法名称
    • Class[] cs = m.getParameterTypes(); 获取某个方法参数列表
    • String name = c.getName(); 获取类名称(全称包含包名)
    • String sinpleName = c.getSimpleName(); 获取简称(只有类名)
    • Method m = c.getMethod("name",new Class[]{int.class,int.class,...}); 获取指定名称,参数列表的方法
    • Object o = m.invoke(obj,param1,param2...); 调用方法,第一个参数为该类对象,后面为参数列表

    Demo:

    public class ClassUtil {
    /**
     * 该方法输出一个对象所属类的所有方法
     * @param 一个需要输出的对象,如1,“a”
     */
    public static void printClassMethods(Object obj){
    	//获取入参的类类型
    	Class c = obj.getClass();
    	//根据类类型,获取该类型下所有方法
    	Method[] ms = c.getMethods();
    	for (Method method : ms) {
    		//获取返回值
    		System.out.print(method.getReturnType().getName()+" ");
    		//获取方法名称
    		System.out.print(method.getName()+"(");
    		//获取参数类型列表,如int,string
    		Class[] paramClass  =method.getParameterTypes();
    		for (Class p : paramClass) {
    			//输出参数类型名称
    			System.out.print(p.getSimpleName()+",");
    		}
    		System.out.println(")");
    	}
    }
    }
    

    Demo2-指定方法获取调用:

        Demo d = new Demo();
    	Class a = d.getClass();		
    	// 获取指定的方法
    	Method m = null;
    	try {
    		m = a.getMethod("print", new Class[] { int.class, int.class });
    	} catch (NoSuchMethodException e) {
    		e.printStackTrace();
    	} catch (SecurityException e) {
    		e.printStackTrace();
    	}
    	// 方法的反射调用
    	Object o = null;
    	try {
    		//invoke(obj,param1,param2...)
    		o=m.invoke(d, 1, 2);
    		//返回o,若为void,返回null,否则为返回类型对象
    	} catch (IllegalAccessException e) {
    		e.printStackTrace();
    	} catch (IllegalArgumentException e) {
    		e.printStackTrace();
    	} catch (InvocationTargetException e) {
    		e.printStackTrace();
    	}
    
    class Demo {
    public void print(String a, String b) {
    	System.out.println(a + b);
    }
    
    public void print(int a, int b) {
    	System.out.println(a + b);
    }
    }
  • 相关阅读:
    【slenium专题】Webdriver同步设置
    【Selenium专题】WebDriver启动firefox浏览器
    【Selenium专题】WebDriver启动Chrome浏览器(二)
    【Selenium专题】WebDriver启动Chrome浏览器(一)
    Jenkins邮件设置
    Jenkins安装笔记
    for循环输出i为同一值的问题,SetTimeOut
    const、let、var的区别
    浏览器title失去焦点时改变title
    clone对象或数组
  • 原文地址:https://www.cnblogs.com/shanelau/p/6581935.html
Copyright © 2011-2022 走看看