上一篇中,通过例子我们知道了如何利用反射机制创建对象,获得类变量和调用方法等。创建对象的语句是 Class cla = Class.forName(type); Object obj = cla.newInstance();这里newInstance()实际上是使用了该类的默认无参构造方法。如果我们要调用其它的构造方法就要稍微复杂一点。比如我们要创建一个 StringBuffer对象,用new 操作符应该是StringBuffer br = new StringBuffer("example");用反射机制则要有以下步骤。
首先,获得StringBuffer类的描述。
Class cla = Class.forName("java.lang.StringBuffer");其次,要创建参数类型数组Class[] . Class[] paraTypes = new Class[1];paraTypes[0]=String.class;然后,通过cla 和 paraTypes 获得Constructor 对象。
Constructor constructor = cla.getConstructor(paraTypes);接着,创建传入的参数列表Object[]. Object[] paraLists = new Object[1]; paraLists[0]="color";最后,得到我们所要得对象。Object obj = constructor.newInstance(paraLists);如果我们paraTypes及paraLists设为null或长度为0,就可以用上述步骤调用StringBuffer的无参构造方法。类似地,我们可以调用对象中的有参方法。比如我们做如下操作br.insert(4, 'u');用反射机制实现如下。
Class[] paratypes = new Class[]{int.class,char.class};
Method method = cla.getMethod("insert", paratypes);
Object[] paralists = new Object[]{4,'u'};
method.invoke(obj, paralists);
反射机制给予我们运行时才确定对象类型的便利,然而它也有显著的缺点。
1,代码笨拙冗长。比如本来一句br.insert(4, 'u');可以解决的问题现在要用到四句。
2,损失了编译时类型检查的好处。这使得你要对付更多的异常。
3,性能损失。用反射机制运行的时间更久。
<<Effective Java >>中给出的建议是“普通应用不应在运行时刻以映像方式访问对象,只是在很有限的情况下使用”。那么在什么地方会用到反射机制呢。已有的较熟悉应用是我们的IDE及一些框架。比如eclipse,编程时ctrl+space弹出的建议就是用到反射机制。比如Spring读取配置文件后生成对应的对象。还有RPC系统也会用到。对于一般的应用软件,你可以在工厂方法中用到它。
分享到:
相关推荐
JAVA反射机制及应用例子.。。Reflection API
### Java反射机制详解 #### 一、反射的基本概念与历史背景 反射的概念最早由Smith在1982年提出,其核心思想是程序有能力访问、检测甚至修改自身的状态和行为。这种能力一经提出,迅速成为了计算机科学领域的研究...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以在程序执行时发现并访问类的字段(fields)、方法(methods)以及构造器(constructors),...
Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中在java.lang.reflect包下,包括Class、Constructor、Method和...
有大量的实验例子和反射的各种方法说明,有大量的实验例子和反射的各种方法说明。
下面是一个简单的Java反射机制的实现例子: ```java import java.lang.reflect.Field; public class ReflectionExample { private String privateField = "默认值"; public static void main(String[] args) ...
### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...
下面我们将深入探讨这个小例子以及Java反射机制的相关知识点。 首先,`Class.forName()`方法在例子中被用来动态加载类。`Class.forName(String className)`接收一个类的全名(包括包名),然后返回对应的`Class`...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者可以动态地获取类的信息并调用其方法,创建对象,访问私有成员,甚至改变类的行为。在深入...
Java反射机制是Java语言提供的一种能在运行时分析类信息并动态操作对象的功能。通过反射,我们可以在程序运行期间获取类的信息(如类名、方法名等),创建对象,调用方法等。这为Java程序带来了极大的灵活性和扩展性...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的动态性...阅读和分析这些资源将进一步加深你对Java反射机制的理解。
### Java反射机制详解 #### 一、反射机制是什么 反射机制是Java编程语言的一个核心特性,它允许程序在运行时动态地获取类的信息,并且能够动态地创建对象和调用对象的方法。简单来说,反射机制使得Java程序可以...
下面我们将详细探讨Java反射的基本概念、使用场景以及如何通过`ReflectTest.java`这个简单的例子来理解反射。 ### 1. 反射的基本概念 反射机制允许我们在运行时检查类的信息,包括类名、方法名、参数类型等,并且...
Java反射机制是Java语言提供的一种强大工具,它允许在程序运行时动态地获取类的信息以及对类的对象进行操作。在Java中,静态编译时类型检查确保了代码的稳定性,但有时我们需要在运行时根据需求动态地创建对象、调用...
Java反射机制允许运行中的程序检查自身,并能直接操作程序的内部属性。这是其他许多编程语言(如Pascal、C或C++)不具备的能力。 **1.1 Reflection的工作机制** 为了展示反射如何工作,我们来看一个简单的例子: ...
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。...通过分析这些例子,你可以更深入地理解Java反射的使用方式及其在实际开发中的应用。
### Java反射机制深入理解 #### 一、反射机制概述 Java反射机制是一种强大的工具,它允许程序在运行时检查和操作任何类、方法、构造函数和字段等元素。这种能力对于构建灵活的应用程序和框架非常有用,特别是那些...
Java反射机制是Java语言提供的一种基础功能,通过反射机制,可以在运行时分析类的属性和方法,并动态调用对象的方法。在Java的java.lang.reflect包中包含了一系列的类来支持反射机制的实现,下面详细介绍一下这些类...
标题"java反射机制例子"暗示我们将探讨如何在实际应用中使用Java反射。以下是一些关键知识点: 1. **Class对象**:每个类在Java中都有一个对应的Class对象,可以通过`Class.forName("类全名")`获取。Class对象包含...
要使用蓝牙设备进行通讯必须的先使两个设备之间建立连接,Android SDK中提供了一些方法可供调用,但是有些方法没有提供接口,于是参考了网上的一些资料写了这个例子,顺便学习下Android反射机制的使用,自测OK,留待...