JAVA【反射】详解

本文详细介绍了Java反射机制,包括如何获取类对象的三种方法,如何通过反射获取构造器、成员变量和方法,并展示了如何使用反射执行方法。还探讨了getName、getCanonicalName与getSimpleName的区别,为理解和运用Java反射提供了全面的指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


反射概述

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

简单来讲,反射是指对于任何一个Class类,在"运行的时候"都可以直接得到这个类全部成分。
在运行时,可以直接得到这个类的构造器对象:Constructor
在运行时,可以直接得到这个类的成员变量对象:Field
在运行时,可以直接得到这个类的成员方法对象:Method
图源:https://pdai.tech图源:https://pdai.tech


反射获取类对象

反射的第一步都是先得到编译后的Class类对象,然后就可以得到Class的全部成分。

请添加图片描述

方法一(Class类中的静态方法:forname)

在这里插入图片描述

方法二(类名.class)、方法三(对象.getClass() )

在这里插入图片描述


反射获取构造器对象

在这里插入图片描述在这里插入图片描述

返回所有构造器对象数组只能拿public

在这里插入图片描述

定位单个构造器

按照参数定位一个无参构造器
定位某个有参构造器

在这里插入图片描述

结果

在这里插入图片描述

暴力反射,破坏封装性,然后创建对象newInstance

.setAccessible(ture);

在这里插入图片描述

有参创建对象newInstance

在这里插入图片描述


反射获取成员变量

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

定位全部成员变量并遍历

在这里插入图片描述

可见常量也是成员变量

可见常量也是成员变量
在这里插入图片描述

赋值

在这里插入图片描述

取值

在这里插入图片描述


使用反射技术获取方法并使用

在这里插入图片描述在这里插入图片描述在这里插入图片描述

提取全部方法并遍历

在这里插入图片描述
获取单个方法
在这里插入图片描述在这里插入图片描述
执行m无参方法
在这里插入图片描述
然后再执行m2有参方法
在这里插入图片描述
在这里插入图片描述


getName、getCanonicalName与getSimpleName的区别

  • getSimpleName:只获取类名
  • getName:类的全限定名,jvm中Class的表示,可以用于动态加载Class对象,例如Class.forName。
  • getCanonicalName:返回更容易理解的表示,主要用于输出(toString)或log打印,大多数情况下和getName一样,但是在内部类、数组等类型的表示形式就不同了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值