`
fanyo
  • 浏览: 44434 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

JAVA反射机制常用方法

阅读更多
JAVA反射机制
    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
1. 得到某个对象的属性

1 public Object getProperty(Object owner, String fieldName) throws Exception {
2     Class ownerClass = owner.getClass();
3
4     Field field = ownerClass.getField(fieldName);
5
6     Object property = field.get(owner);
7
8     return property;
9 }
Class ownerClass = owner.getClass():得到该对象的Class。

Field field = ownerClass.getField(fieldName):通过Class得到类声明的属性。

Object property = field.get(owner):通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。

2. 得到某个类的静态属性

1 public Object getStaticProperty(String className, String fieldName)
2             throws Exception {
3     Class ownerClass = Class.forName(className);
4
5     Field field = ownerClass.getField(fieldName);
6
7     Object property = field.get(ownerClass);
8
9     return property;
10 }

Class ownerClass = Class.forName(className) :首先得到这个类的Class。

Field field = ownerClass.getField(fieldName):和上面一样,通过Class得到类声明的属性。

Object property = field.get(ownerClass) :这里和上面有些不同,因为该属性是静态的,所以直接从类的Class里取。

3. 执行某对象的方法

1 public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception {
2
3     Class ownerClass = owner.getClass();
4
5     Class[] argsClass = new Class[args.length];
6
7     for (int i = 0, j = args.length; i < j; i++) {
8         argsClass[i] = args[i].getClass();
9     }
10
11     Method method = ownerClass.getMethod(methodName, argsClass);
12
13     return method.invoke(owner, args);
14 }
Class owner_class = owner.getClass() :首先还是必须得到这个对象的Class。

5~9行:配置参数的Class数组,作为寻找Method的条件。

Method method = ownerClass.getMethod(methodName, argsClass):通过Method名和参数的Class数组得到要执行的Method。

method.invoke(owner, args):执行该Method,invoke方法的参数是执行这个方法的对象,和参数数组。返回值是Object,也既是该方法的返回值。

4. 执行某个类的静态方法

1 public Object invokeStaticMethod(String className, String methodName,
2             Object[] args) throws Exception {
3     Class ownerClass = Class.forName(className);
4
5     Class[] argsClass = new Class[args.length];
6
7     for (int i = 0, j = args.length; i < j; i++) {
8         argsClass[i] = args[i].getClass();
9     }
10
11     Method method = ownerClass.getMethod(methodName, argsClass);
12
13     return method.invoke(null, args);
14 }

基本的原理和实例3相同,不同点是最后一行,invoke的一个参数是null,因为这是静态方法,不需要借助实例运行。

5. 新建实例
1
2 public Object newInstance(String className, Object[] args) throws Exception {
3     Class newoneClass = Class.forName(className);
4
5     Class[] argsClass = new Class[args.length];
6
7     for (int i = 0, j = args.length; i < j; i++) {
8         argsClass[i] = args[i].getClass();
9     }
10
11     Constructor cons = newoneClass.getConstructor(argsClass);
12
13     return cons.newInstance(args);
14
15 }

这里说的方法是执行带参数的构造函数来新建实例的方法。如果不需要参数,可以直接使用newoneClass.newInstance()来实现。

Class newoneClass = Class.forName(className):第一步,得到要构造的实例的Class。

第5~第9行:得到参数的Class数组。

Constructor cons = newoneClass.getConstructor(argsClass):得到构造子。

cons.newInstance(args):新建实例。

6. 判断是否为某个类的实例

1 public boolean isInstance(Object obj, Class cls) {
2     return cls.isInstance(obj);
3 }

7. 得到数组中的某个元素
1 public Object getByArray(Object array, int index) {
2     return Array.get(array,index);
3 }
分享到:
评论

相关推荐

    反射实例-JAVA反射机制

    ### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...

    Java反射常用机制

    通过阅读《Java反射机制-较全面PPT.ppt》这样的资源,你可以更深入地理解这些概念,并学习如何在实际项目中安全有效地使用反射。这不仅有助于提高代码的灵活性,也有助于解决某些特定场景下的编程难题。在学习过程中...

    类的反射机制 常用的方法(简单明确)

    ### 类的反射机制及其常用方法 #### 反射机制简介 反射是Java语言的一个重要特性,它允许在运行时检查类、接口、字段和方法的信息,并且可以动态地调用方法或修改字段值。这种能力使得Java程序具有高度的灵活性和...

    java反射机制 字符串——java对象

    在Java反射机制中,字符串可以用来表示类名、方法名或参数类型,是连接代码与运行时类信息的桥梁。 在Java中,将Java对象的数据封装成XML格式的字符串,通常涉及到对象序列化的过程。对象序列化是将对象的状态转换...

    Java 反射常用方法及实例.pdf

    Java 反射机制是 Java 语言提供的一个重要功能,可以在运行时检查类、接口、方法和变量等信息,无需知道类的名字、方法名等。通过反射机制,可以在运行时实例化新对象、调用方法、设置和获取变量值等。 获取 Class...

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

    总之,Java反射机制为开发者提供了极大的灵活性,能够在运行时探索和操作类的内部细节,从而实现高度动态的程序设计。然而,过度使用反射可能会降低代码可读性和性能,因此应当权衡利弊,合理运用。

    Java反射机制概述.pdf

    Java反射机制是指Java程序在运行时,可以动态地获取一个类的信息以及调用其方法的机制。这是Java语言的一个重要特性,允许程序在运行时检查和修改类的行为。 #### 反射机制的基本操作 在Java中,反射机制允许...

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

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

    Java语言的反射机制.pdf

    Java反射机制允许程序在运行时通过调用Reflection APIs取得任何一个已知名称的Class的内部信息,既包括其修饰符、基类、所实现的接口等,也包括fields和methods的所有信息,并可于运行时改变fields内容或调用methods...

    java反射机制学习(五):工厂模式

    Java反射机制是Java语言提供的一种强大的能力,它允许在运行时检查类、接口、字段和方法的信息,并且能够动态地创建对象和调用方法。在本篇“java反射机制学习(五):工厂模式”中,我们将探讨如何利用反射与工厂模式...

    java中的常用反射机制详细分析案例

    下面我们将深入探讨Java反射机制的核心概念、常见用法及其在实际开发中的应用。 1. **核心概念** - **类的Class对象**:每个Java类在内存中都有一个对应的Class对象,它包含了该类的所有信息,如类名、方法、字段...

    Java反射机制

    Java反射机制是Java语言的一个重要特性,它使得Java能够在运行时动态地获取类的信息,并且能够动态地调用类的方法和属性。这一特性极大地增强了Java语言的灵活性和扩展性。 #### 二、Java反射机制的功能 Java反射...

    关于反射机制的面试题.

    在 Java 中,反射机制主要通过 `java.lang.reflect` 包中的类和方法来实现。例如,`Class.forName()` 方法可以用来获取一个类的 `Class` 对象,而 `getMethod()` 方法可以用来获取一个类的方法对象。 三、反射机制...

    Java反射机制 深入浅出

    ### Java反射机制深入浅出 #### 一、什么是反射? 反射是Java中一项非常重要的特性,它允许程序在运行时动态地获取类的信息,并且能够直接操作这些信息。通俗来说,反射就像是为Java对象装上了一面镜子,通过这面...

    Java安全漫谈 - 01.反射篇(1)1

    Class.forName() 方法是 Java 反射机制中的一种常用方法,用于加载类。但是,这个方法也存在安全隐患。攻击者可以使用这个方法来加载恶意类,导致系统受到攻击。 安全编码实践 为了避免反射机制的安全隐患,需要...

    java程序各种常用方法集锦

    本资源"java程序各种常用方法集锦"正是为了解决这些问题而整理的一份综合性的代码库,包含了大量实用的代码示例。下面,我们将详细探讨这些关键知识点。 1. **集合操作**: - `ArrayList`与`LinkedList`:两种最...

Global site tag (gtag.js) - Google Analytics