欢迎来到论文网! 识人者智,自知者明,通过生日认识自己! 生日公历:
网站地图 | Tags标签 | RSS
论文网 论文网8200余万篇毕业论文、各种论文格式和论文范文以及9千多种期刊杂志的论文征稿及论文投稿信息,是论文写作、论文投稿和论文发表的论文参考网站,也是科研人员论文检测和发表论文的理想平台。lunwenf@yeah.net。
您当前的位置:首页 > 科技论文 > 计算机论文

Java反射技术浅谈

时间:2011-04-23  作者:秩名
publicint add(int x, int y) {

returnx + y;

}

publicvoid shout(String name) {

System.out.println('myname is' + name);

}

publicstatic void main(String[] args) throws Exception {

//创建该类的一个对象

Classclazz = InvokeMethod.class;

Objectobj = clazz.newInstance();

//调用该对象的add方法

Methodamethod = clazz.getMethod('add', new Class[]

{int.class,int.class });

Objectresult = amethod.invoke(obj, new Object[] { 5, 7 });

System.out.println(result);

//调用该对象的shout方法

Methodsmethod = clazz.getMethod('shout', new Class[] { String.class });

smethod.invoke(obj,new Object[] { 'lkl' });

//以上语句作用相当于直接执行如下语句

//InvokeMethod im=new InvokeMethod();

//int sum=im.add(5, 7);

//System.out.println(sum);

//im.shout('lkl');

}

}

4. 运行时动态创建数组并操作数组元素在java.lang.reflect包下还提供了一个Array类,该类包括一系列static方法,通过这些方法可以来动态的创建数组,给数组元素赋值,取出数组元素值等。

Array提供的主要方法如下:

Østatic ObjectnewInstance(Class componentType, int[] dimensions) :创建一个具有指定的组件类型和维度的新数组。

Østatic xxx getXxx(Objectarray, int index):以 xxx形式返回指定数组对象array中第index个元素的值。其中xxx代表八个基本数据类型。如果元素类型是引用类型,则直接使用static Object get(Object array, int index)方法。

Østatic void setXxx(Objectarray, int index ,xxx val):给数组对象array中第index个元素赋值val。其中xxx代表八个基本数据类型。如果元素类型是引用类型,则直接使用static void set(Objectarray, int index ,Object val)方法。

public class ArrayTest {

publicstatic void main(String[] args) throws Exception {

//创建一个含有10个元素的整型数组

Classclazz = Class.forName('java.lang.Integer');

Objectarr = Array.newInstance(clazz, 10);

//给第五个元素赋值

Array.set(arr,5, 20);

//取出第五个元素值并输出

Objectelem = Array.get(arr, 5);

System.out.println(elem);

//以上语句相当于执行如下语句

//int arr[]=new int[10];

//arr[5]=20;

//System.out.println(arr[5]);

}

}

四、反射的优点和缺点反射是提高Java程序的灵活性和可扩展性至关重要的技术,它使得Java软件系统具有自适应能力,实现程序的动态演进。它提供一种动态链接程序组件的多功能方法,允许程序创建和控制任何类的对象(根据安全性限制),无需提前硬编码目标类。这些特性使得反射特别适用于创建以非常普通方式与对象协作的库。例如,反射经常在持续存储对象为数据库、XML或其它外部格式的框架中使用。Java 反射非常有用, 如软件测试、JavaBean、EJB等, 它使类和数据结构能按名称动态检索相关信息, 并允许在运行着的程序中操作这些信息。Java这一特性非常强大, 并且是其它一些常用语言, 如C、C++、Fortran 等都不具备的。充分发掘Java 中的这一特性, 可以编写出灵活、低耦合、高重用的组件。目前许多流行的开源框架例如Struts、Hibernate、Spring在实现过程中都采用了Java反射技术。

但反射有两个缺点。第一个是性能问题。用于字段和方法接入时反射要远慢于直接代码。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于直接执行相同的操作。免费论文网。因此Java反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用。

另外一个缺点是使用反射会模糊程序内部实际要发生的事情。程序人员希望在源代码中看到程序的逻辑,反射等绕过了源代码的技术会带来维护问题。反射代码比相应的直接代码更复杂。解决这些问题的最佳方案是保守地使用反射——仅在它可以真正增加灵活性的地方——记录其在目标类中的使用。

五、总结反射是提高Java程序的灵活性和可扩展性至关重要的技术,它使得Java软件系统具有自适应能力,实现程序的动态演进,是JAVA 成为动态语言的一个重要特性。理解Java反射技术的内部机制,对于我们理解目前流行的开源框架Struts、Hibernate、Spring等的实现机制是很有帮助的,同时在开发中应用Java反射技术,可以提高软件的灵活性、重用性,降低耦合性。


参考文献
[1] 孙卫琴·《Java网络编程精解》·电子工业出版社,2007年3月
[2] 李刚·《疯狂Java讲义》·电子工业出版社,2008年10月
[3] 侯捷·Java反射机制·程序员,2004年10月
[4] 尹松强,傅鹂·Java反射机制探究·软件导刊,2008年11月
[5] 王开, 谭翼, 周兰江·JAVA中反射机制浅析及应用·计算机教育,2007年01月
 

查看相关论文专题
加入收藏  打印本文
上一篇论文:Java多线程同步机制在售票系统的实现
下一篇论文:Java技术在XML和数据库通信技术中的应用
科技论文分类
科技小论文 数学建模论文
数学论文 节能减排论文
数学小论文 低碳生活论文
物理论文 建筑工程论文
网站设计论文 农业论文
图书情报 环境保护论文
计算机论文 化学论文
机电一体化论文 生物论文
网络安全论文 机械论文
水利论文 地质论文
交通论文
相关计算机论文
最新计算机论文
读者推荐的计算机论文