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反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...
通过阅读《Java反射机制-较全面PPT.ppt》这样的资源,你可以更深入地理解这些概念,并学习如何在实际项目中安全有效地使用反射。这不仅有助于提高代码的灵活性,也有助于解决某些特定场景下的编程难题。在学习过程中...
### 类的反射机制及其常用方法 #### 反射机制简介 反射是Java语言的一个重要特性,它允许在运行时检查类、接口、字段和方法的信息,并且可以动态地调用方法或修改字段值。这种能力使得Java程序具有高度的灵活性和...
在Java反射机制中,字符串可以用来表示类名、方法名或参数类型,是连接代码与运行时类信息的桥梁。 在Java中,将Java对象的数据封装成XML格式的字符串,通常涉及到对象序列化的过程。对象序列化是将对象的状态转换...
Java 反射机制是 Java 语言提供的一个重要功能,可以在运行时检查类、接口、方法和变量等信息,无需知道类的名字、方法名等。通过反射机制,可以在运行时实例化新对象、调用方法、设置和获取变量值等。 获取 Class...
总之,Java反射机制为开发者提供了极大的灵活性,能够在运行时探索和操作类的内部细节,从而实现高度动态的程序设计。然而,过度使用反射可能会降低代码可读性和性能,因此应当权衡利弊,合理运用。
Java反射机制是指Java程序在运行时,可以动态地获取一个类的信息以及调用其方法的机制。这是Java语言的一个重要特性,允许程序在运行时检查和修改类的行为。 #### 反射机制的基本操作 在Java中,反射机制允许...
### Java反射机制的原理及在Android下的简单应用 #### 一、Java反射机制的基本概念 反射(Reflection)是指程序在运行时能够访问、检测和修改它自身的能力。这种能力使得程序能够动态地获取自身的结构信息并操作...
Java反射机制允许程序在运行时通过调用Reflection APIs取得任何一个已知名称的Class的内部信息,既包括其修饰符、基类、所实现的接口等,也包括fields和methods的所有信息,并可于运行时改变fields内容或调用methods...
Java反射机制是Java语言提供的一种强大的能力,它允许在运行时检查类、接口、字段和方法的信息,并且能够动态地创建对象和调用方法。在本篇“java反射机制学习(五):工厂模式”中,我们将探讨如何利用反射与工厂模式...
下面我们将深入探讨Java反射机制的核心概念、常见用法及其在实际开发中的应用。 1. **核心概念** - **类的Class对象**:每个Java类在内存中都有一个对应的Class对象,它包含了该类的所有信息,如类名、方法、字段...
Java反射机制是Java语言的一个重要特性,它使得Java能够在运行时动态地获取类的信息,并且能够动态地调用类的方法和属性。这一特性极大地增强了Java语言的灵活性和扩展性。 #### 二、Java反射机制的功能 Java反射...
在 Java 中,反射机制主要通过 `java.lang.reflect` 包中的类和方法来实现。例如,`Class.forName()` 方法可以用来获取一个类的 `Class` 对象,而 `getMethod()` 方法可以用来获取一个类的方法对象。 三、反射机制...
### Java反射机制深入浅出 #### 一、什么是反射? 反射是Java中一项非常重要的特性,它允许程序在运行时动态地获取类的信息,并且能够直接操作这些信息。通俗来说,反射就像是为Java对象装上了一面镜子,通过这面...
Class.forName() 方法是 Java 反射机制中的一种常用方法,用于加载类。但是,这个方法也存在安全隐患。攻击者可以使用这个方法来加载恶意类,导致系统受到攻击。 安全编码实践 为了避免反射机制的安全隐患,需要...
本资源"java程序各种常用方法集锦"正是为了解决这些问题而整理的一份综合性的代码库,包含了大量实用的代码示例。下面,我们将详细探讨这些关键知识点。 1. **集合操作**: - `ArrayList`与`LinkedList`:两种最...