`

JAVA的反射基本原理应用

阅读更多

今天看深入浅JDK学了点东西。。需要记录一下子.JAVA的反射基制的简单应用。

JAVA反射的功能:

1。在运行时判断任意一个对象所属的类

2。在运行时构造任意一个类的对象

3。在运行时判断任意一个类所具有的方法

4。在运行时调用任意一个对象的方法。

5。构建动态代理。

新一个类:

 

 接口就不写了:

class ObjImpl implements ObjInterface {

 @Override
 public String getGreeting() {

  return "Hello World.....王涛";
 }

}

 

调用类:

public class Runner {
 public static void main(String[] args) {

   Class objClass = Class.forName("com.testreflect.ObjImpl");//加载这个类
 
   ObjInterface obj = (ObjInterface) (objClass.newInstance());// 根据类名得到类的实例
      Method method = obj.getClass().getMethod("getGreeting",null);// 以下根据方法名得到方法对象
    //在调用取得这个方法的对象的时候要注意getMthod();这个方法有哪个参数..第一个是方法的名称。。如果这个方法

  需要参数的话。。要指定。。参数和类型。。否会抛异常:

  如果:getGreeting(String name,Integer count); 则应该是:

obj.getClass().getMethod("getGreeting",new Class[]{String.class,Integer.class});// 参数类型数组

 调用:method.invoke(obj,new Object[]{"wangta",345});

 

 

JDK的API是这样解释的:

 

 

public Method getMethod(String name,
                        Class<?>... parameterTypes)
                 throws NoSuchMethodException,
                        SecurityException
返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。name 参数是一个 String,用于指定所需方法的简称。parameterTypes 参数是按声明顺序标识该方法形参类型的 Class 对象的一个数组。如果 parameterTypesnull,则按空数组处理。

如果 name 是 "<init>;" 或 "<clinit>",则将引发 NoSuchMethodException。否则,要反映的方法由下面的算法确定(设 C 为此对象所表示的类):

  1. 在 C 中搜索任一匹配的方法。如果找不到匹配的方法,则将在 C 的超类上递归调用第 1 步算法。
  2. 如果在第 1 步中没有找到任何方法,则在 C 的超接口中搜索匹配的方法。如果找到了这样的方法,则反映该方法。
在 C 类中查找匹配的方法:如果 C 正好声明了一个具有指定名称的公共方法并且恰恰有相同的形参类型,则它就是反映的方法。如果在 C 中找到了多个这样的方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则反映该方法;否则将从中任选一个方法。

注意,类中可以有多个匹配方法,因为尽管 Java 语言禁止类声明带有相同签名但不同返回类型的多个方法,但 Java 虚拟机并不禁止。这增加了虚拟机的灵活性,可以用来实现各种语言特性。例如,可以使用桥方法 (brige method)实现协变返回;桥方法以及将被重写的方法将具有相同的签名,不同的返回类型。

   Object result = method.invoke(obj,null);// 动态调用方法
   System.out.println("返回结果:" + (String) result);

}

 

}

转自:http://www.dev26.com/home/start

分享到:
评论

相关推荐

    java反射的原理机制

    Java反射是Java编程语言中的一个强大特性,它允许我们在运行时检查类、接口、字段和方法的信息,并且能够在运行时创建和操作对象。...理解并掌握反射原理,对于编写灵活、强大的Java应用程序至关重要。

    java反射原理详解

    Java反射机制是Java语言的一种强大的特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射主要涉及到`java.lang.Class`类、`java.lang.reflect`包中的类(如Constructor、Method、Field)以及...

    java反射机制原理

    本文将深入探讨Java反射机制的原理及其在实际开发中的应用。 首先,我们要理解什么是反射。反射是指在运行时,程序能够获取关于类、接口、字段和方法等信息,并且能够动态地调用方法、创建对象的能力。在Java中,`...

    java反射机制的原理及在Android下的简单应用

    ### Java反射机制的原理及在Android下的简单应用 #### 一、Java反射机制的基本概念 反射(Reflection)是指程序在运行时能够访问、检测和修改它自身的能力。这种能力使得程序能够动态地获取自身的结构信息并操作...

    java反射机制原理和反射机制总结

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。这一机制的核心在于`java.lang.Class`类和相关的API,它们提供了对类元数据的访问,使得我们能够在运行时...

    Java反射技术的一般应用

    在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...

    java反射原理及作用

    根据提供的文件信息,我们可以深入探讨Java反射机制的基本原理及其应用场景。 ### Java反射机制的基本概念 Java反射机制允许程序在运行时获取类的信息,并且能够直接操作这些信息。这包括类名、方法名称、参数类型...

    JAVA反射机制原理及代码

    本文将深入探讨Java反射机制的原理、API以及应用。 一、什么是Java的反射机制 Java反射机制是Java语言的一个重要特性,它允许程序在运行时获取关于任何已知类的内部信息,包括类的修饰符、超类、实现的接口,以及...

    java面试题--反射机制

    通过本文,我们将深入探讨Java反射机制的核心概念、基本原理及其应用场景。 #### 二、Java反射机制简介 Java反射机制允许程序在运行时获取类的信息,这使得Java具有了一定程度上的动态性。具体来说,Java反射机制...

    Java反射机制深度解析:原理、应用与实践技巧

    本文将深入探讨Java反射机制的原理、应用场景以及如何在实际开发中使用反射。 Java反射机制是一项强大而灵活的功能,它使得Java程序能够在运行时动态地检查和操作类及其成员。在实际开发中,反射机制在框架设计、...

    java反射基本方法测试

    下面我们将详细探讨Java反射的基本方法及其应用。 一、获取类信息 1. `Class` 类:反射的核心是`Class`类,它代表一个Java类。通过`Class`对象,我们可以获取到类的元数据。获取`Class`对象的方法有: - 使用`...

    反射实例-JAVA反射机制

    ### 反射实例—JAVA反射机制 #### 一、反射概念及原理 ...总结而言,Java反射机制是构建灵活、可扩展应用程序的强大工具。然而,在使用反射时,开发者应当权衡其带来的好处和潜在的风险,确保合理有效地利用这一特性。

    java反射机制详解与应用

    本文将深入探讨Java反射机制的原理、应用以及如何使用反射API。 首先,让我们了解如何生成Class对象,这是反射操作的基础。Class对象代表了Java中的类,可以通过以下四种方式获取: 1. 使用`getClass()`方法:每个...

    java反射机制原理1

    首先,让我们深入理解Java反射机制的基本概念: 1. **Class对象**:每个类在Java中都有一个对应的Class对象,它包含了该类的所有信息,如类名、方法、字段等。我们可以通过`Class.forName(String className)`或`...

    java 反射机制例子

    ### Java反射机制详解 #### 一、反射的基本概念与历史背景 反射的概念最早由Smith在1982年提出,其核心思想是程序有能力访问、检测甚至...对于初学者而言,了解并掌握Java反射机制的基本原理和应用场景是非常有益的。

    Java反射原理_SSH框架最底层技术

    理解Java反射原理对于深入学习和使用SSH框架至关重要。 首先,我们需要了解Java虚拟机(JVM)的运行时数据区,特别是方法区。方法区存储了加载的类的类型信息,包括类的全限定名、超类信息、是否为接口、访问修饰符...

    快速掌握java反射原理

    以下是对Java反射原理的详细解析: 一、Java反射的基本概念 1. 类加载:当Java虚拟机(JVM)加载一个类时,会为该类创建一个`Class`对象。这个过程就是类加载,可以通过`Class.forName()`或`ClassLoader.loadClass...

Global site tag (gtag.js) - Google Analytics