`

Method类invoke方法的使用

    博客分类:
  • j2ee
阅读更多
java.lang.reflect.Method
 public Object invoke(Object obj, Object... args)
参数:
obj:从中调用底层方法的对象,必须是实例化对象
args: 用于方法调用,是一个object的数组,因为参数有可能有多个
返回:
使用参数args在obj上指派该对象所表示的方法的结果。
invoke方法中的obj就是一个实例化对象,可以直接返回对象的中每个属性的值。
加上后面的agrs结果是一样的。
例如:StudentDemo.class
package com.payeco.demo;

public class StudentDemo {
	private int id;
	private String name;
	private String sex;
	private String age;
	private String brithday;
	private String address;

	public StudentDemo() {
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getBrithday() {
		return brithday;
	}

	public void setBrithday(String brithday) {
		this.brithday = brithday;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

}
 测试代码:demo.class
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Demo {
	public static void main(String[] args) throws  IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		StudentDemo sd=new StudentDemo(); 
		sd.setId(1);
		sd.setName("测试invoke");
		sd.setSex("未知");
		sd.setAge("10000");
		sd.setBrithday("19920205");
		sd.setAddress("湖南");
		Object[] agrs = new Object[]{};
		StringBuilder sb = new StringBuilder();
		sb.append("<Object.XmlString> start");
		for (Method m : sd.getClass().getMethods()) {
			if (m.getName().startsWith("get")) {
				System.out.println(m.getName());
				sb.append("  <" + m.getName().substring(3) + ">");
				sb.append(m.invoke(sd,agrs));
				System.out.println("---"+m.invoke(sd, args));
			}
		}
		System.out.println(sb.toString());
	}
}
分享到:
评论

相关推荐

    java反射机制及Method.invoke解释

    这个方法首先通过 `owner.getClass()` 得到该对象的 Class,然后通过 `getMethod(methodName, argsClass)` 得到要执行的方法,最后通过 `method.invoke(owner, args)` 执行该方法。 在 Java 反射机制中,我们可以...

    Java Method类及invoke方法原理解析

    Java Method类及invoke方法原理解析 Java Method类是Java反射机制中的一个重要组件,它提供...Java Method类的invoke()方法提供了一种灵活的方式来调用Java方法,但需要注意invoke()方法的使用限制和潜在的异常风险。

    详解Java中Method的Invoke方法

    Java 中 Method 的 Invoke 方法详解 Java 中的 Method 对象提供了 invoke 方法,这个方法可以动态地调用 Java 方法。下面详细介绍了 invoke 方法的实现机制。 首先,在调用 invoke 方法之前,需要检查 ...

    java反射机制详解及Method.invoke解释.pdf

    在使用 Method.invoke() 方法时,需要注意参数的类型和数量,因为 Method.invoke() 方法会根据参数的类型和数量来确定要调用的方法。如果参数的类型或数量不正确,可能会引发异常。 在 Java 反射机制中,除了可以...

    黑马程序员------代理类中invoke方法注意点

    本篇文章将深入探讨代理类中`invoke`方法的使用及其注意事项。 代理类主要用于实现AOP(面向切面编程),它可以提供一种透明的方式,让我们在不修改原有代码的情况下,对方法调用进行增强。在Java中,有两种主要的...

    Invoke反射

    `Invoke`方法是MethodInfo类的一个成员,它允许我们动态地调用一个方法。以下是一段基本的代码示例: ```csharp using System; using System.Reflection; public class TestClass { public void PrintMessage...

    解析Java中的Field类和Method类

    Java中的Field类和Method类是Java反射机制的重要组成部分,它们提供了对类的字段(属性)和方法的动态访问和操作能力。在Java编程中,反射允许我们在运行时检查类的信息,包括类的结构、方法、字段,甚至可以修改类...

    C# 线程访问UI 代理Invoke技术 标准实现

    以下是一个简单的示例,展示如何使用代理和`Invoke`方法安全地更新UI: ```csharp // 创建一个委托类型,表示要执行的方法 public delegate void UpdateUI(string message); // 在后台线程中更新UI private void ...

    Java方法反射调用demo

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...

    反射,动态加载指定类调用类中的方法

    在“反射,动态加载指定类调用类中的方法”这个主题中,我们将深入探讨如何使用反射来实现动态加载和执行类的方法。首先,我们需要理解几个关键的反射API: 1. `Class&lt;?&gt;`: 这是所有Java类的通用表示,通过`Class....

    Java反射值Method

    以下示例展示了如何使用`Method`类的`invoke`方法来调用`String`类的`length`和`charAt`方法: ```java String str = "Hello, World!"; Class&lt;?&gt; clazz = String.class; // 调用length方法 Method lengthMethod = ...

    java反射机制,调用私有方法

    4. **调用静态方法**:`Method`类的`getDeclaredMethod()`方法可以获取类的静态方法,然后通过`invoke(null, parameters)`来调用它们,其中第一个参数为`null`表示调用静态方法,不需要实例对象。 5. **处理数组**...

    invoke回调

    `InvocationHandler`接口的`invoke()`方法在代理对象的方法被调用时会被触发,我们可以在这里实现回调逻辑: ```java public class MyInvocationHandler implements InvocationHandler { private Object target; ...

    Java反射机制及Method.invoke详解

    parameterTypes)`找到对应的方法,最后通过`Method`对象的`invoke(Object obj, Object... args)`执行方法,其中`obj`是目标对象,`args`是传递给方法的实际参数。 4. **执行类的静态方法** 对于静态方法,执行...

    Java反射方法调用

    首先,要调用无参方法,我们可以使用`Class`对象的`getMethod()`方法获取到方法的`Method`实例,然后通过`invoke()`方法执行该方法。例如: ```java Class&lt;?&gt; clazz = Class.forName("YourClassName"); Object ...

    Java反射之Constructor、Method、Field使用及说明

    通过本文的学习,我们了解到Java反射机制中`Constructor`、`Method`、`Field`以及`Class`类的基本使用方法。这些工具不仅增强了程序的灵活性,还提供了强大的扩展能力。在实际开发中合理利用反射机制,可以有效提升...

    InvocationHandler中invoke()方法的调用问题分析

    "InvocationHandler中invoke()方法的调用问题... InvocationHandler 中 invoke() 方法的调用问题分析可以帮助我们更好地理解 Java 中的动态代理机制,掌握 InvocationHandler 的使用方法,实现更加灵活的动态代理机制。

    Invoke_objects_by_string.zip_invoke_objects

    在.NET Framework的C#中,我们可以使用`Type`类的`GetMethod()`方法和`Delegate`类型的`DynamicInvoke()`方法来实现动态调用。 这些技术虽然强大,但也需要谨慎使用,因为它们可能导致代码难以理解和维护,同时也...

    frida反射调用对象中的方法与字段.pdf

    使用`classObject.getDeclaredMethod("methodName", 类型1.class, 类型2.class).invoke(objectInstance, 参数1, 参数2)`来调用对象中的方法。 文章中以一个具体的demo app为例,其中定义了一个`ParametersTest`类,...

Global site tag (gtag.js) - Google Analytics