zoukankan      html  css  js  c++  java
  • Java反射理解(五)-- 方法反射的基本操作

    Java反射理解(五)-- 方法反射的基本操作

    方法的反射

    1. 如何获取某个方法

    方法的名称和方法的参数列表才能唯一决定某个方法

    2. 方法反射的操作

    method.invoke(对象,参数列表)

    举例

    具体操作请看下面举例:

    import java.lang.reflect.Method;
    
    class A{
    	public void print(){
    		System.out.println("helloworld");
    	}
    	public void print(int a,int b){
    		System.out.println(a+b);
    	}
    	public void print(String a,String b){
    		System.out.println(a.toUpperCase()+","+b.toLowerCase());
    	}
    }
    
    public class MethodDemo1 {
    	public static void main(String[] args) {
    	   //要获取print(int ,int )方法  1.要获取一个方法就是获取类的信息,获取类的信息首先要获取类的类类型
    		A a1 = new A();
    		Class c = a1.getClass();
    		/*
    		 * 2.获取方法 名称和参数列表来决定  
    		 * getMethod获取的是public的方法
    		 * getDelcaredMethod自己声明的方法
    		 */
    	    try {
    			//Method m =  c.getMethod("print", new Class[]{int.class,int.class});
    	    	Method m = c.getMethod("print", int.class,int.class);
    	    	
    	    	//方法的反射操作  
    	    	//a1.print(10, 20);方法的反射操作是用m对象来进行方法调用 和a1.print调用的效果完全相同
    	        //方法如果没有返回值返回null,有返回值返回具体的返回值
    	    	//Object o = m.invoke(a1,new Object[]{10,20});
    	    	Object o = m.invoke(a1, 10,20);
    	    	System.out.println("==================");
    	    	//获取方法print(String,String)
                 Method m1 = c.getMethod("print",String.class,String.class);
                 //用方法进行反射操作
                 //a1.print("hello", "WORLD");
                 o = m1.invoke(a1, "hello","WORLD");
                 System.out.println("===================");
               //  Method m2 = c.getMethod("print", new Class[]{});
                    Method m2 = c.getMethod("print");
                   // m2.invoke(a1, new Object[]{});
                    m2.invoke(a1);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} 
         
    	}
    }
    

    总结步骤如下:

    1. 获取对象的类类型:getClass()
    2. 获取方法,名称和参数列表来决定(记住要 try...catch... 操作):
      • getMethod 获取的是public的方法
      • getDelcaredMethod 自己声明的方法
    3. 方法的反射操作:method.invoke()

    完。

  • 相关阅读:
    SGU 271 Book Pile (双端队列)
    POJ 3110 Jenny's First Exam (贪心)
    HDU 4310 Hero (贪心)
    ZOJ 2132 The Most Frequent Number (贪心)
    POJ 3388 Japanese Puzzle (二分)
    UVaLive 4628 Jack's socks (贪心)
    POJ 2433 Landscaping (贪心)
    CodeForces 946D Timetable (DP)
    Android Studio教程从入门到精通
    Android Tips – 填坑手册
  • 原文地址:https://www.cnblogs.com/weixuqin/p/11220748.html
Copyright © 2011-2022 走看看