Java--Reflect(反射)专题5——方法反射的基本操作

转载请注明:http://blog.csdn.net/uniquewonderq

1.如何获取某个方法

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

2.方法的反射操作

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

1.获取一个方法就是获取类的信息,获取类的信息,首先要获取类的类类型。

2.获取方法名称和参数列表来决定

getMethod获取的是public的方法

getDeclaredMethod获取所有声明的方法

<span style="font-size:18px;">package com.test;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author wonderq
 */
public class MethodReflect {
    public static void main(String[] args)  {
        //获取print方法,但是有两个,这里获取print(int ,int)
        //1.获取一个方法就是获取类的信息,获取类的信息,首先要获取类的类类型。
        A a1=new A();
        Class c=a1.getClass();
        try {
            /*
            2.获取方法名称和参数列表来决定
            getMethod获取的是public的方法
            getDeclaredMethod获取所有声明的方法
            */
            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");//这个时候第二个参数,没有,那么就不传,变参可以为空
            m2.invoke(a1);
        } catch (NoSuchMethodException ex) {
            ex.printStackTrace();
        } catch (SecurityException ex) {
            ex.printStackTrace();
        } catch (IllegalAccessException ex) {
            Logger.getLogger(MethodReflect.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalArgumentException ex) {
            Logger.getLogger(MethodReflect.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvocationTargetException ex) {
            Logger.getLogger(MethodReflect.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}
class A{
    public void print(){
        System.out.println("helloworld!");
    }
    public void print(int a,int b){
        System.out.println("a+b="+(a+b));
    }
    public void print(String a,String b){
        System.out.println(a.toUpperCase()+","+b.toLowerCase());
    }
}</span>

输出结果:

run:

a+b=30

=========================

HELLO,world

=========================

helloworld!

这就是获取方法对象,然后用方法对象进行反射操作。

时间: 2024-11-03 23:59:08

Java--Reflect(反射)专题5——方法反射的基本操作的相关文章

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法.   转载https://my.oschina.net/u/1407116/blog/209383 摘要 java.lang.reflect.Field使用 Field. 首先必须明一点 Field类主要是用来辅助获取和操作类的属性的! 1.怎么通过反射获取类的属性 先来看JDK提供的方法有如下几种: a)Class.getDeclaredField(String name);      返回一个 Fiel

java反射-反射实例化对象-反射获得构造方法-反射获得普通方法-获得属性

链接:https://www.zhihu.com/question/24304289/answer/38218810来源:知乎著作权归作者所有,转载请联系作者获得授权. Class<?> cls = Class.forName("cn.mldn.demo.Person"); // 取得Class对象 第一步:获得对象,构造方法,普通方法,属性 Object obj = cls.newInstance() Constructor<?> cons = cls.get

Java —— Reflect反射机制

Class类的使用 OOP的世界里,万事万物皆对象.类是谁的对象呢?——类是对象,类是java.lang.Class类的实例对象!There is a class named class. 实例: //有一个类 class Foo { void print() {System.out.println("Foo");} } //在main函数里: public static void main(String[] args) { //Foo这个类也是一个实例对象,Class类的实例对象,如

java动态加载指定的类或者jar包反射调用其方法

序言 有时候,项目中会用到java动态加载指定的类或者jar包反射调用其方法来达到模块的分离,使各个功能之间耦合性大大降低,更加的模块化,代码利用率更高.模式中的代理模式就用到java的这一机制.下边就让我们通过代码来看看如何实现此功能. 代码详细 package loadjarclass; import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoad

java动态载入指定的类或者jar包反射调用其方法

序言 有时候.项目中会用到java动态载入指定的类或者jar包反射调用其方法来达到模块的分离,使各个功能之间耦合性大大减少,更加的模块化.代码利用率更高.模式中的代理模式就用到java的这一机制. 下边就让我们通过代码来看看怎样实现此功能. 代码具体 package loadjarclass; import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoa

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){

乐字节Java反射之三:方法、数组、类加载器和类的生命周期

本文承接上一篇:乐字节Java发射之二:实例化对象.接口与父类.修饰符和属性 继续讲述Java反射之三:方法.数组.类加载器 一.方法 获取所有方法(包括父类或接口),使用Method即可. public static void test() throws Exception { Class<?> clz = Class.forName("com.shsxt.ref.simple.User "); //获取属性 System.out.println("======

反射类的方法(其中main方法比较特殊)

package reflet; import java.util.List; public class person { public String name="hahaah"; public void aa1()//方法 { System.out.println("aa1"); } public void aa1(String name,int password) { System.out.println(name+":"+password);

反射之获取方法信息

本文接上文"反射之Class类的使用",以编写一个用来获取类的信息(成员函数.成员变量)的工具类来讲解"反射之获取方法信息" 1.新建工具类,命名ClassUtil,输入一个对象(Object),输出该对象的基础信息方法(printClassMessage) 1 /** 2 * 打印类的信息,成员函数.成员变量 3 * Created by Format on 2017/6/3. 4 */ 5 public class ClassUtil { 6 7 } 2.获取类