JAVA的反射机制

一、反射的含义:

Java类的一种自审机制,它是一种可以认识自身和动态改变自身的一种行为。

二、反射的使用:

1、通常在对文件操作时需要用到类的反射机制,通过反射可以获取一个未知类的内部信息(如:属性、 方法等)

2、本使用步骤:

A、反射应用中首先应用Class创建一个指向某个类(如A类,非默认包时应加上包名)的对象。

B、利用刚创建的对象调用getDeclaredField/getDeclaredFields获取A类中的指定属性或所有属性(返回Field数组);调用 getDeclaredMethod/getDeclaredMethods获取A类中的指定方法或所有方法(返回Method数组);调用 getDeclaredConstructor/getDeclaredConstructors获取A类中指定构造方法或所有构造方法(返回Constructor数组)。

C、上述2步过程若不加Declared则指定调用公共的属性及方法

D、上述2步过程在操作非共有(尤其为私有情况时)属性及方法时应用反射方法对象或反射属性对象调用setAccessible(true)去除java系统的调用访问检查。

E、 反射属性对象可以调用set方法设置生成该反射属性对象的反射类对象指向的类中的属性值,调用get方法则获取该反射属性对象的反射类对象指向的类中的属性值,反射方法对象可以调用invoke方法来调用生成该反射方法对象的反射类对象指向的类中的方法并返回Object类型值(必要时需要强制转换)。反射构造方法对象则可以调用newinstance方法来生成一个用参数表指定的反射属性对象所指向的类的实例引用(即对象引用)。

   Java语言反射提供一种动态链接程序组件的多功能方法。它允许程序创建和控制任何类的对象(根据安全性限制),无需提前硬编码目标类。这些特性使得反射特别适用于创建以非常普通的方式与对象协作的库。例如,反射经常在持续存储对象为数据库、XML或其它外部格式的框架中使用。Java reflection 非常有用,它使类和数据结构能按名称动态检索相关信息,并允许在运行着的程序中操作这些信息。Java 的这一特性非常强大,并且是其它一些常用语言,如 C、C++、Fortran 或者 Pascal 等都不具备的。

但反射有两个缺点。第一个是性能问题。用于字段和方法接入时反射要远慢于直接代码。性能问题的程度取决于程序中是如何使用反射的。如果它作为程序运行中相对很少涉及的部分,缓慢的性能将不会是一个问题。即使测试中最坏情况下的计时图显示的反射操作只耗用几微秒。仅反射在性能关键的应用的核心逻辑中使用时性能问题才变得至关重要。

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

 

http://blog.sina.com.cn/s/blog_5f044a740100dia8.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值