Java语言的反射机制

        在Java运行时环境中,对于任何一个类,都可以知道这个类有哪些属性和方法,对于任何一个类,

也能调用它的任意一个方法。这种动态获取类的信息以及动态调用对象的方法的功能来自Java语言的

反射(Reflection)机制

        Java反射机主要提供了以下几个功能:

        1、在运行时判断任意一个对象所属的类

        2、在运行时构造任意一个类的对象。

        3、在运行时判断任意一个类所具有的成员变量和方法

        4、在运行时调用任意一个对象的方法


        Reflection是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过

Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(public,static等等)、

superclass(如Object),实现的interfaces,也包括fields和methods的所有信息,并可于运行时改变

fields内容或调用methods。

        一般而言,开发者社群说到动态语言,大致认同的一个定义是:程序在运行时,允许翻遍程序结

构或变量类型,这种语言成为动态语言。从这个观点看,Perl,Python,Ruby是动态语言,C++,

Java,C#是不是动态语言。

        尽管在这样的定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关机制:Reflection。

用在Java身上指的是我们可以在运行时加载、探知、使用编译期间完全未知的classes。Java程序可以

加载一个运行时才得知名称的class,获悉其完整构造,并生成其对象实体、或对其fields设置、或唤起

其methods。这种“看透class”的能力被称为introspection。Reflection和introspection是常被并提的两个术

语。

        在JDK中,主要由一下类来实现Java反射机制,这些类都位于java.lang.reflect包中

        1、Class类:代表一个类

        2、Field类:代表类的成员变量

        3、Method类:代表类的方法

        4、Constructor类:代表类的构造方法

        5、Array类:提供了动态创建数组,以及访问数组的元素的静态方法


        当一个class被加载,或当加载器(class loader)defineClass()被JVM调用,JVM便自动产生

一个Class object。如果想借由“修改Java标准库源码”来观察Class object的实际生成时机,不能够!

因为Class并没有public constructor。

        Class是Reflection起源。针对任何您想探勘的class,唯有先为它产生一个Class object,接下来

才能经由后者唤起为数十多个的Reflection APIs。












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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值