首页 > 编程语言 > 详细

Java反射

时间:2019-10-16 22:07:17      阅读:66      评论:0      收藏:0      [点我收藏+]

引用简述文章:https://www.jianshu.com/p/9be58ee20dee

定义:

Oracle官方对反射的解释是

Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods,
and constructors to operate on their underlying counterparts, within security restrictions.

The API accommodates applications that need access to either the public members of a target object (based on its runtime class) or the members declared
by a given class. It also allows programs to suppress default reflective access control.

简而言之是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

程序中一般的对象的类型都是在编译期就确定下来的,而Java反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。

反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁

Java反射提供的功能

  1. 在运行时判断任何一个对象所属的类 
  2. 在运行时构造任何一个类的对象
  3. 在运行时判断任何一个类所具有的的成员变量和方法
  4. 在运行时调用任何一个对象的成员变量和方法(通过反射甚至可以调用private方法)
  5. 生成动态代理

java.lang.reflect 包下 

  • Class 描述(代表)一个类
  • Field 描述(代表)一个类的成员变量
  • Method 描述(代表)一个类的方法
  • Constructor 描述(代表)一个类的构造函数
  • Array 提供动态创建数组,以及访问数组元素的静态方法

反射主要用途

反射最重要的用途就是开发各种通用框架。
很多框架(比如Spring)都是配置化的(比如通过XML文件配置JavaBean,Action之类的),为了保证框架的通用性,它们可能需要根据配置文件加载不同的对象或类,调用不同的方法,这个时候就必须用到反射——运行时动态加载需要加载的对象反射最重要的用途就是开发各种通用框架。

当我们在使用IDE(如Eclipse,IDEA)时,当我们输入一个对象或类并想调用它的属性或方法时,一按点号,编译器就会自动列出它的属性或方法,这里就会用到反射

JDBC中,利用反射动态加载了数据库驱动程序。Web服务器中利用反射调用了Sevlet的服务方法。Eclispe等开发工具利用反射动态刨析对象的类型与结构,动态提示对象的属性和方法。很多框架都用到反射机制,注入属性,调用方法,如Spring。

 java中的编译类型

静态编译:在编译时确定类型,绑定对象即通过。

动态编译:运行时确定类型,绑定对象。

动态编译最大限度地发挥了Java的灵活性,体现了多态的应用,可以减低类之间的耦合性。Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public、static等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变fields内容或唤起methods

技术分享图片

Java反射

原文:https://www.cnblogs.com/SweetnessInstinct/p/11675248.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!