`
liss
  • 浏览: 843010 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java反射中Method类invoke方法的用法

阅读更多
2010年04月13日 下午 04:43
  1. import java.lang.reflect.Method;   
  2.   
  3. public class InvokeTester {   
  4.   
  5. public int add(int param1, int param2) {   
  6.   return param1 + param2;   
  7. }   
  8.   
  9. public String echo(String mesg) {   
  10.   return "echo" + mesg;   
  11. }   
  12.   
  13. public static void main(String[] args) throws Exception {   
  14.    Class classType = InvokeTester.class;   
  15.    Object invokertester = classType.newInstance();    //下面介绍与new 的区别
  16.      
  17.    Method addMethod = classType.getMethod("add", new Class[] { int.class,   
  18.     int.class });   
  19.   //Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象,   
  20.   //如果参数为基本类型数据,必须转换为相应的包装类型的对象。invoke()方法的返回值总是对象,   
  21.   //如果实际被调用的方法的返回类型是基本类型数据,那么invoke()方法会把它转换为相应的包装类型的对象,   
  22.   //再将其返回   
  23.    Object result = addMethod.invoke(invokertester, new Object[] {   
  24.     new Integer(100), new Integer(200) });   
  25.   //在jdk5.0中有了装箱 拆箱机制 new Integer(100)可以用100来代替,系统会自动在int 和integer之间转换   
  26.    System.out.println(result);   
  27.   
  28.    Method echoMethod = classType.getMethod("echo",   
  29.     new Class[] { String.class });   
  30.    result = echoMethod.invoke(invokertester, new Object[] { "hello" });   
  31.    System.out.println(result);   
  32. }   
  33. }  

//==================================

newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。
我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类已经加载;2、这个类已经连接了。

newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。

最后用最简单的描述来区分new关键字和newInstance()方法的区别:
newInstance: 弱类型。低效率。只能调用无参构造。
new: 强类型。相对高效。能调用任何public构造。

分享到:
评论

相关推荐

    java反射机制及Method.invoke解释

    在 Java 反射机制中,我们可以通过 Method 对象的 invoke 方法来执行某对象的方法,这个方法的返回值是 Object 类型的,可以是基本类型、数组、集合等各种类型。 Java 反射机制提供了一种动态获取类信息和执行对象...

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

    在 Java 反射机制中,Method.invoke() 方法是非常重要的。该方法可以用来调用对象的方法。例如,要执行某个对象的方法,可以使用 Method 对象的 invoke() 方法来调用该方法。该方法的参数是执行该方法的对象和参数...

    详解Java中Method的Invoke方法

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

    Java反射值Method

    本文将深入探讨Java反射中的一个关键组件——`Method`,以及如何利用`Class`类的多种方法来获取和操作类的方法。 ### 一、`Method`与`Class`的关系 在Java反射中,`Method`类提供了访问类或接口声明的公共成员方法...

    Java方法反射调用demo

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

    Java Method类及invoke方法原理解析

    Java Method类是Java反射机制中的一个重要组件,它提供了对Java方法的抽象表示和操作能力。通过Method类,可以获取方法的信息、调用方法、设置方法的访问权限等。 Method类的主要方法包括: * getName():返回方法...

    java 反射得到某个方法

    在本文中,我们将深入探讨如何使用Java反射来获取并执行某个特定的方法。 首先,我们需要了解Java反射的基本概念。`java.lang.Class`类是反射的核心,它代表了Java中的每一个类。我们可以通过以下方式获取到一个...

    JAVA反射机制的入门代码

    4. **调用方法**:使用`Class`对象的`getMethods()`或`getDeclaredMethods()`获取公共或私有方法,然后通过`Method`对象的`invoke()`方法执行这些方法。对于静态方法,可以不传入对象;对于非静态方法,需要传入对应...

    java反射,获取所有属性、方法以及List集合类

    本篇文章将深入探讨如何使用Java反射来获取一个类的所有属性、方法,并处理List集合类。 首先,让我们了解Java反射的基础概念。在Java中,`java.lang.Class`类代表运行时的类信息。我们可以使用`Class.forName()`...

    Java 反射创建get set方法及反射方法的调用

    本文介绍了如何使用Java反射机制来创建get和set方法,并通过反射调用这些方法来访问对象的属性。这种方式虽然灵活,但在实际开发中应当谨慎使用,因为它可能会降低代码的性能和可维护性。了解反射机制的基本原理对于...

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

    Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查和操作类、接口、字段和方法的信息。这种动态类型的能力使得Java代码能够处理未知或未提前定义的对象,增强了程序的灵活性和可扩展性。在Java中...

    Java反射调用工具类

    Java反射调用是Java语言提供的一种强大的动态类型机制,它允许程序在运行时检查并使用类的信息,包括类的方法、属性以及构造器等。在Java中,反射是通过`java.lang.reflect`包中的类实现的,如`Class`、`Constructor...

    java 反射 调用私有方法(有参数私有方法)获取私有属性值

    Java反射是Java语言提供的一种强大的动态类型特性,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够动态地创建对象和调用方法。这个能力使得开发者可以突破静态类型的束缚,实现一些在编译时期无法完成...

    java反射 java反射 java反射java反射

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...

    Java反射调用方法

    在给定的代码中,`TestRef` 类展示了如何使用Java反射调用方法。首先,我们创建了一个 `Foo` 类,它有一个私有字符串成员变量 `msg` 和三个方法:`setMsg`、`getMsg` 和 `outInfo`。`main` 方法是演示反射调用的入口...

    Java反射动态加载实例类

    5. **调用方法**:使用`Method`类的`invoke()`方法调用对象的指定方法。 #### 三、代码分析 在`Refelection`类中,`useRefelect`方法实现了动态加载实例类的功能。首先,它读取了配置文件中的信息,然后根据`CLASS...

    Java反射方法调用

    在这个主题中,我们将深入探讨如何使用Java反射来调用不同类型的参数方法,包括无参方法、Object类型参数的方法、基本类型参数的方法以及数组参数的方法,以及如何调用私有方法。 首先,要调用无参方法,我们可以...

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

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

    Invoke反射

    【Invoke反射】是一种在.NET框架中使用的重要编程技术,它属于C#或.NET中的动态编程范畴,主要基于System.Reflection命名空间。反射允许程序在运行时检查自身的信息,并且能够动态地创建对象、调用方法、访问属性和...

    java反射.pdf

    - 在`invoke`方法中实现具体的业务逻辑。 - 编写创建代理类的方法`getProxy`,使用`Proxy.newProxyInstance()`。 - 创建代理类的工厂类。 - 使用方式:通过代理类调用目标方法。 ```java public class ...

Global site tag (gtag.js) - Google Analytics