当前位置:首页 > 技术 >

java中反射set方法和get方法(java通过反射获取类的属性)

来源:原点资讯(www.yd166.com)时间:2023-04-10 13:38:06作者:YD166手机阅读>>

目录:

一.反射基础

二.反射的作用

三.反射机制执行的流程

一.反射基础

什么是反射?

反射使 java 代码可以发现有关已加载类的字段,方法和构造函数的信息,并在安全性限制内使用反射对这些字段,方法和构造函数进行操作。

反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中LEAD/LEAD 、OpenC 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。

Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到jvm中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是:如果使用不当,反射的成本很高。

简而言之,指在 Java 程序运行时

  • 给定的一个类(Class)对象,通过反射获取这个类(Class)对象的所有成员结构。
  • 给定的一个具体的对象,能够动态地调用它的方法及对任意属性值进行获取和赋值。

这种动态获取类的内容,创建对象、以及动态调用对象的方法及操作属性的机制为反射。即使该对象的类型在编译期间是未知,该类的 .class 文件不存在,也可以通过反射直接创建对象。

优势

  • 增加程序的灵活性,避免将固有的逻辑程序写死到代码里
  • 代码简洁,可读性强,可提高代码的复用率

劣势

  • 相较直接调用,在量大的情景下反射性能下降
  • 存在一些内部暴露和安全隐患

为什么要有反射

有了反射,我们可以做以下事情:

  • 在运行时检查一个对象
  • 在运行时,根据一个class构造一个对象
  • 在运行时,检查一个对象的属性和方法
  • 在运行时,调用一个对象的任意一个方法
  • 在运行时,改变对象的构造函数,属性,方法的可见性等等

反射是很多框架的共有的方法:

  • 例如JUnit,就是使用反射去找出那些带有@Test注解的方法,然后就利用反射在单元测试中调用这些方法
  • 在web框架中,开发人员将他们定义实现的接口和类放到配置文件中,使用反射,他可以动态地在运行时自动初始化这些类和接口 例如,Spring中一般这样使用配置文件:

<bean id="someID" class="com.programcreek.Foo">

<property name="someField" value="someValue" /></bean>

当Spring读取到bean文件的时候,会调用Class.forName(String)方法"com.programcreek.Foo"来初始化这个类,然后在使用反射正确的get到所配置的属性的set方法,并把相应的值set进去。

servlet web 也是使用这种反射技术:

<servlet>

<servlet-name>someServlet</servlet-name>

<servlet-class>com.programcreek.WhyReflectionServlet</servlet-class><servlet>

反射的原理(类加载)

关于类加载机制,大家可以参考我的这篇文章:

深入理解JVM虚拟机——类的加载机制

深入理解JVM虚拟机——JVM是如何实现反射的?

类加载机制流程

java中反射set方法和get方法,java通过反射获取类的属性(1)

类的加载

java中反射set方法和get方法,java通过反射获取类的属性(2)

反射的原理图解

java中反射set方法和get方法,java通过反射获取类的属性(3)

二. 反射的作用

一个类的成员包括以下三种:域信息、构造器信息、方法信息。而反射则可以在运行时动态获取到这些信息,在使用反射时,我们常用的类有以下五种。

java中反射set方法和get方法,java通过反射获取类的属性(4)

栏目热文

java中set的用法整理(java里set如何使用)

java中set的用法整理(java里set如何使用)

Set是Java集合类中的一部分,继承了Collection接口。特点:Set中的数据不允许重复。基本操作1、创建Set...

2023-04-10 13:25:06查看全文 >>

java中的get和set方法有什么用(javaget方法和set方法有什么用)

java中的get和set方法有什么用(javaget方法和set方法有什么用)

我们先来看看set和get这两个词的表面意思,set是设置的意思,而get是获取的意思,顾名思义,这两个方法是对数据进行...

2023-04-10 14:08:20查看全文 >>

java中set和get用法(java中set集合的用法)

java中set和get用法(java中set集合的用法)

对于 java 初学者来说,set 和 get 这两个方法似乎已经很熟悉了,这两个方法就是 JAVA 编程中的基本用法,...

2023-04-10 13:21:23查看全文 >>

java类的get和set方法是灰色的(javaget方法和set方法有什么用)

java类的get和set方法是灰色的(javaget方法和set方法有什么用)

对于 java 初学者来说,set 和 get 这两个方法似乎已经很熟悉了,这两个方法就是 JAVA 编程中的基本用法,...

2023-04-10 13:31:23查看全文 >>

java中set和get后的括号用法(java中set的用法详解)

java中set和get后的括号用法(java中set的用法详解)

对于 java 初学者来说,set 和 get 这两个方法似乎已经很熟悉了,这两个方法就是 JAVA 编程中的基本用法,...

2023-04-10 13:41:39查看全文 >>

java的set用法(java 什么时候使用set)

java的set用法(java 什么时候使用set)

序欢迎来到全网最完整的java进阶知识系列教程!!!每天定时更新!!!本期是Java进阶知识系列的第五讲,继上一讲Lis...

2023-04-10 13:59:33查看全文 >>

岗南水库最深多少米(岗南水库一般多深)

岗南水库最深多少米(岗南水库一般多深)

河北位于我国华北地区,西部和北部是高山,南部和东部是平原。本省属于温带大陆型季风气候,年均降水量500毫米左右,水资源紧...

2023-04-10 14:10:27查看全文 >>

河北第一大水库(河北十大水库排名)

河北第一大水库(河北十大水库排名)

旅游风物志,揽四海胜景,博人间风华。河北唐山,素有“京东宝地”之称,地貌复杂多样,整体来说,背山临海,位于迁西县的八面峰...

2023-04-10 14:08:24查看全文 >>

黄壁庄水库深度多少米(黄壁庄水库库容量多少)

黄壁庄水库深度多少米(黄壁庄水库库容量多少)

炎炎夏日,带上家人邂逅绿水青山,在大自然中感受清凉。或静坐在山顶,观云海涌动、星空灿烂;或立在岸边,看夕阳西下,享人生美...

2023-04-10 13:50:42查看全文 >>

王快水库水深多少米(王快水库的水主要来自哪里)

王快水库水深多少米(王快水库的水主要来自哪里)

■回眸百年党史 见证“治水”初心系列报道之四□本报记者 安亚静 邸志永 刘澜8月2日,王快水库溢洪道水声阵阵。库水从提起...

2023-04-10 14:01:07查看全文 >>

文档排行