为了学习reflect,特意写了两个类,我觉得反射最重要的就是通过方法名调用方法.
一个被调用的类,和一个 利用reflect的调用类.
PlainJavaClass.java:
java 代码
- package reflect;
- public class PlainJavaClass {
- public int a = 2;
- public int b = 3;
- public PlainJavaClass()
- {
-
- }
- public PlainJavaClass(int a,int b)
- {
- this.a = a;
- this.b = b;
- }
- public int add()
- {
- return a + b;
- }
- public int plus(int a, int b)
- {
- return a-b;
- }
- }
ReflectJavaClass.java:
java 代码
- package reflect;
- import java.lang.reflect.*;
- public class ReflectJavaClass {
- public void invokePlain() {
- Class Plain = null;
- Method add = null;
- Method plus = null;
- Class[] plusPara = {int.class,int.class};
- Object[] transPlusPara = {new Integer(50),new Integer(20)};
- Object addReturnObj = null;
- Object plusReturnObj = null;
- try {
- Plain = Class.forName("reflect.PlainJavaClass");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- return;
- }
-
- try {
- add = Plain.getDeclaredMethod("add",null);
- plus = Plain.getDeclaredMethod("plus",plusPara);
- } catch (SecurityException e) {
- e.printStackTrace();
- return;
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- return;
- }
- try {
- addReturnObj = add.invoke(new PlainJavaClass(5,2),null);
- plusReturnObj = plus.invoke(new PlainJavaClass(),transPlusPara);
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- return;
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- return;
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- return;
- }
- Integer addReturnValue = (Integer)addReturnObj;
- Integer plusReturnValue = (Integer)plusReturnObj;
- System.out.println("return value :"+addReturnValue);
- System.out.println("return value :"+plusReturnValue);
- }
- public static void main(String[] args)
- {
- new ReflectJavaClass(). invokePlain();
- }
- }
可以看出是第2个类来调用第一个类.
要利用java的reflect首先要取得PlainJavaClass对应的Class对象:Plain = Class.forName("reflect.PlainJavaClass"),注意其中的reflect.PlainJavaClass类名称中包名reflect不能缺少.
得到Plain之后就可以得到Plain中定义的某个方法,add=Plain.getDeclaredMethod("add",null);或者plus = Plain.getDeclaredMethod("plus",plusPara);其中第一个参数是方法名(String),第2个是参数的类型数组(Class[]).
得到了Method对象就可以调用了.addReturnObj = add.invoke(new PlainJavaClass(5,2),null);或者plusReturnObj = plus.invoke(new PlainJavaClass(),transPlusPara); ,invoke第一个参数是方法所在对象(Object),第2个参数是方法传进去的参数值(Objec[]).
方法调用之后可以得到相应的返回值:
Integer addReturnValue = (Integer)addReturnObj;
Integer plusReturnValue = (Integer)plusReturnObj;
System.out.println("return value :"+addReturnValue);
System.out.println("return value :"+plusReturnValue);
运行结果如下:
return value :7
return value :30
分享到:
相关推荐
免费共享,很详细的介绍了反射机制的原理,适合追根究底的java学习者
Java反射机制主要依赖于`java.lang.reflect`包下的API,其中包括: - `java.lang.Class`:表示一个类的运行时信息。 - `java.lang.reflect.Method`:表示类的方法。 - `java.lang.reflect.Field`:表示类的字段。 -...
Java反射机制主要通过`java.lang.reflect`包下的API实现,其中最重要的类包括: - `Class`:代表一个类,是所有反射操作的基础。 - `Method`:表示类中的一个方法。 - `Constructor`:表示类中的一个构造函数。...
### Java中的反射机制 #### 一、反射的概念 反射的概念最早由Smith于1982年提出,是指程序能够访问、检测和修改其自身状态或行为的能力。这一概念的引入促进了计算机科学领域对反射性的研究,并迅速被应用于程序...
在Java中,反射主要涉及到`java.lang.Class`类、`java.lang.reflect`包下的类如`Constructor`、`Method`和`Field`等。通过这些类,我们可以实现对Java对象的深度控制,比如访问私有属性、调用私有方法、创建对象等。...
### Java反射机制详解 #### 一、什么是Java的反射机制 Java反射机制是Java语言的一种重要特性,使得Java成为了一种动态性很强的语言。通过反射,可以在程序运行时获取类的信息,包括类名、父类、接口、字段、方法...
Java反射机制主要基于`java.lang.Class`类和`java.lang.reflect`包中的接口和类。`Class`对象代表了运行时的类信息,通过`Class.forName()`方法可以获取到类的`Class`对象。此外,`java.lang.reflect`包中的`...
Java中的反射机制是Java语言一个强大的特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够动态地创建对象和调用方法。在深入理解Java反射机制之前,我们首先需要知道什么是类的元数据,即关于类本身的...
本文将通过实例深入解析Java反射机制。 首先,我们来看`TestParam.java`和`ParamClass.java`这两个文件,它们可能涉及到参数化类的使用。在Java中,反射可以帮助我们在运行时获取泛型信息。尽管Java的类型擦除导致...
Java 反射机制的实现是通过 java.lang.Class 类和 java.lang.reflect 包来实现的。Class 类代表了 Java 中的一个类,而 java.lang.reflect 包提供了许多反射类,例如 Constructor、Method、Field 等。 Constructor ...
### Java反射机制详解 #### 一、反射机制是什么 反射机制是Java编程语言的一个核心特性,它允许程序在运行时动态地获取类的信息,并且能够动态地创建对象和调用对象的方法。简单来说,反射机制使得Java程序可以...
### Java反射机制总结 #### 反射的概念与起源 反射的概念最早由Smith于1982年提出,指的是程序能够访问、检测并修改其自身状态或行为的能力。这一概念的提出迅速引起了计算机科学领域的广泛关注,并在之后的研究中...
### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者可以动态地获取类的信息并调用其方法,创建对象,访问私有成员,甚至改变类的行为。在深入...
Java反射的核心在于`java.lang.Class`类,以及`java.lang.reflect`包中的`Method`、`Field`和`Constructor`等类。`Class`类非常特殊,它代表了运行时的Java类和接口,包括枚举、数组、原始Java类型和void关键字。每...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。这种机制使得Java具有高度的灵活性和动态性,可以在编译时未知类的情况下进行类的加载、实例化、方法调用等操作...
在Java中,反射主要通过`java.lang.Class`类和`java.lang.reflect`包中的几个关键类(如`Constructor`、`Method`和`Field`)来实现。当你在程序运行时获取到一个类的`Class`对象,你就可以获取该类的所有信息,包括...
首先,要使用Java反射,我们需要导入`java.lang.reflect`包中的关键类,如`Class`、`Constructor`、`Method`和`Field`。`Class`对象是反射的起点,它代表了Java中的类或接口。我们可以通过以下三种方式获取`Class`...
### Java反射机制详解 #### 一、反射的基本概念与历史背景 反射的概念最早由Smith在1982年提出,其核心思想是程序有能力访问、检测甚至修改自身的状态和行为。这种能力一经提出,迅速成为了计算机科学领域的研究...