Java反射之调用方法

简介: 笔记

通过反射机制还可以调用方法,这与调用构造方法类似。调用方法需要使用Method对象,它对应着一 个方法,获得Method对象需要使用Class类的如下方法:


Method[] getMethods():返回所有公有方法Method对象数组。

Method[] getDeclaredMethods():返回所有方法Method对象数组。

Method getMethod(String name, Class… parameterTypes):通过方法名和参数类型返回公有方法 Method对象。参数parameterTypes是Class数组,指定方法的参数列表。

Method getDeclaredMethod(String name, Class… parameterTypes):通过方法名和参数类型返回方 法Method对象。参数parameterTypes同上。

现有一个Person类:

public class Person {
    public String name;
    public int age;
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }
    public void setNameAndAge(String name,int age){
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

现在编写一个程序通过反射机制调用Person类setNameAndAge和getName方法,具体代码如下:

import java.lang.reflect.Method;
public class HelloWorld {
    public static void main(String[] args) {
        try{
            Class clz = Class.forName("Java反射机制.调用方法.Person");
//            调用默认构造方法
            Person person = (Person) clz.newInstance();
            System.out.println(person);
//            1.指定参数类型
            Class[] params = new Class[2];
//            第一个参数是String
            params[0] = String.class;
//            第二个参数是int
            params[1] = int.class;
//           2.获取setNameAndAge方法对象
            Method method = clz.getMethod("setNameAndAge",params);
//            3。设置传递参数
            Object[] argObjs = new Object[2];
//            第一个参数传递Tony
            argObjs[0] = "Tony";
//            第二个参数传递21
            argObjs[1] = 21;
//            4.调用setNameAndAge方法,person是要调用的对象,argObjs是设置要传递的参数值
            method.invoke(person,argObjs);
            System.out.println(person);
//            获取getName方法对象,该方法没有参数
            method = clz.getMethod("getName");
//            调用getName方法
            Object result = method.invoke(person);
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行结果:

Person{name='null', age=0}
Person{name='Tony', age=21}
Tony


相关文章
|
2月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
2月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
84 9
|
11天前
|
Java 数据库连接 Spring
反射-----浅解析(Java)
在java中,我们可以通过反射机制,知道任何一个类的成员变量(成员属性)和成员方法,也可以堆任何一个对象,调用这个对象的任何属性和方法,更进一步我们还可以修改部分信息和。
|
2月前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
47 4
|
2月前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
56 4
|
2月前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
27 1
|
2月前
|
监控 Java
Java基础——反射
本文介绍了Java反射机制的基本概念和使用方法,包括`Class`类的使用、动态加载类、获取方法和成员变量信息、方法反射操作、以及通过反射了解集合泛型的本质。同时,文章还探讨了动态代理的概念及其应用,通过实例展示了如何利用动态代理实现面向切面编程(AOP),例如为方法执行添加性能监控。
|
3月前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
62 17
|
2月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
139 4
|
2月前
|
Java
Java的反射
Java的反射。
39 2