笔记——Java基础之Java反射

Java反射机制允许程序在运行时动态访问和修改类的信息,包括构造函数、方法和属性。它涉及获取Class对象,创建实例,调用方法,访问属性,以及实现动态代理。虽然反射提供强大功能,但因运行时操作可能影响性能,故在性能敏感的场景下需谨慎使用。
摘要由CSDN通过智能技术生成

第一问:什么是Java反射?

答:顾名思义,反射就相当于一面镜子,对着镜子我们可以整理衣冠等。Java反射机制同样,它是可以动态的访问,检测和修改本身的一种能力。

第二问:那么它的基本工作流程是什么?

它的工作流程主要有以下几步:

一、获取到类的Class对象,获取方式一:通过Class.forName(className)来获取;获取方式二:通过ClassName.getClass()获取;获取方式三:通过new ClassName().getClass()的方式来获取。

二、获取到类的构造(Constructor)对象:获取构造对象的目的是为了后续创建类的实例对象,当然,也可以直接通过Class.newInstance()来获取,这样获取的方式默认是无参构造创建的类实例对象,但是前提是类中没有其他的有参构造器,若有的话,该方法就行不通了。

三、获取到类的实例对象(也就是类的反射对象),获取的方法是通过Constructor对象的newInstance()方法来获取或者是Class.newInstance()来获取。

四、接着就是对属性、方法的访问和调用。使用Class对象的getMethod()方法或getDeclaredMethod()即可访问到类的方法,拿到Method对象后,通过Method对象的invoke()方法就可以实现对类方法的调用,invoke()方法有两个参数,一个是类所属对象(Class Object),第二个是方法的参数(args...)。使用getField()方法就能访问到类的对应属性字段,前提是要注意类的方法和属性的访问权限限制,也就是修饰符,关于修饰符这里不做赘述。

五、动态代理:通过Proxy可以创建代理对象,代理对象可以拦截方法的调用并添加额外的逻辑。

六、修改访问权限:通过AccessibleObjectsetAccessible()方法可以绕过Java的访问控制,允许访问私有方法、字段和构造方法。其实这步不是必须的,在开发中按照自己的需求来。

最后,Java反射固然好用,但毕竟是在运行时,也就是内存中操作,对性能有一定的影响,所以对性能有要求的,应尽量少使用反射来实现业务。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT丶Jason

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值