专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java基础学习:java反射实现机制

Java基础学习:java反射实现机制

更新时间:2020-04-15 14:21:22 来源:星辉 浏览1909次

    反射(Reflection)是Java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性和方法。

Java基础学习:java反射实现机制

    反射是一项高级开发人员应该掌握的“黑科技”,其实反射并不是Java独有的,许多编程语言都提供了反射功能。在面试中面试官也经常对反射问题进行考察,反射是所有注解实现的原理,尤其在框架设计中,有不可替代的作用。

    关于反射,常见的面试考察点包括:

    如何反射获取Class对象

    如何反射获取类中的所有字段

    如何反射获取类中的所有构造方法

    如何反射获取类中的所有非构造方法

    本篇我们就一起来学习一下Java反射机制。

    一、反射是什么?

    反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。

    通俗地讲,一提到反射,我们就可以想到镜子。镜子可以明明白白地照出我是谁,还可以照出别人是谁。反映到程序中,反射就是用来让开发者知道这个类中有什么成员,以及别的类中有什么成员。

    二、为什么要有反射

    有的同学可能会疑惑,Java已经有了封装为什么还要有反射呢?反射看起来像是破坏了封装性。甚至让私有变量都可以被外部访问到,使得类变得不那么安全了。

    我们来看一下Oracle官方文档中对反射的描述:

    UsesofReflection

    ReflectioniscommonlyusedbyprogramswhichrequiretheabilitytoexamineormodifytheruntimebehaviorofapplicationsrunningintheJavavirtualmachine.Thisisarelativelyadvancedfeatureandshouldbeusedonlybydeveloperswhohaveastronggraspofthefundamentalsofthelanguage.Withthatcaveatinmind,reflectionisapowerfultechniqueandcanenableapplicationstoperformoperationswhichwouldotherwisebeimpossible.

    ExtensibilityFeatures

    Anapplicationmaymakeuseofexternal,user-definedclassesbycreatinginstancesofextensibilityobjectsusingtheirfully-qualifiednames.

    ClassBrowsersandVisualDevelopmentEnvironments

Aclassbrowserneedstobeabletoenumeratethemembersofclasses.Visualdevelopmentenvironmentscanbenefitfrommakinguseoftypeinformationavailableinreflectiontoaidthedeveloperinwritingcorrectcode.

    DebuggersandTestTools

 Debuggersneedtobeabletoexamineprivatemembersonclasses.TestharnessescanmakeuseofreflectiontosystematicallycalladiscoverablesetAPIsdefinedonaclass,toinsureahighlevelofcodecoverageinatestsuite.

    从Oracle官方文档中可以看出,反射主要应用在以下几方面:

    反射让开发人员可以通过外部类的全路径名创建对象,并使用这些类,实现一些扩展的功能。

    反射让开发人员可以枚举出类的全部成员,包括构造函数、属性、方法。以帮助开发者写出正确的代码。

    测试时可以利用反射API访问类的私有成员,以保证测试代码覆盖率。

    也就是说,Oracle希望开发者将反射作为一个工具,用来帮助程序员实现本不可能实现的功能(performoperationswhichwouldotherwisebeimpossible)。正如《人月神话》一书中所言:软件工程没有银弹。很多程序架构,尤其是三方框架,无法保证自己的封装是完美的。如果没有反射,对于外部类的私有成员,我们将一筹莫展,所以我们有了反射这一后门,为程序设计提供了更大的灵活性。工具本身并没有错,关键在于如何正确地使用。

Java基础学习:java反射实现机制

 以上就是星辉java培训机构的小编针对“Java基础学习:java反射实现机制”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>