java 反射 字段长度_java如何通过反射操作字段

之前我写了《java创建对象除了new,还有其他办法吗?》、《什么?java方法还可以这样调用》、《私有方法?我照样要访问》这三篇文章,描述了通过java反射创建对象以及调用方法,有兴趣的朋友可以翻阅一下。

c22798592f00ae6d5b149911f372662e.png

今天我再来写写怎么通过反射操作字段吧。老规矩,先上我们要操作的类的代码。

ee9af9b35977c93118ede708a0bf7e0a.png

这个demo类比较简单,一个非静态的字段name,一个静态的字段staticName,都赋值了初始值。下面我们来聊聊怎么通过反射对着俩字段进行读写。

非静态字段的读写

先来看看怎么通过反射对非静态字段进行读取的操作吧,废话不多说,上代码。

651eb2f59572c73382ff11f0b35e3602.png

看看是不是和前面文章中讲的获取方法有些类似,通过“getDeclaredField”方法就可以获取到字段了。要读取字段的值,那就需要调用这个字段的“get”方法了。那是要读取那个对象的这个字段值呢,就需要通过调用“get”方法的时候通过参数来说明了。执行一下,验证看看能不能读取到字段的值呢。

ps:大家有没有注意到“nameField.setAccessible(true)”这句,还不清楚这句含义的朋友,翻阅一下我前面的文章《私有方法?我照样要访问》吧。

68425179cc103c45ce6696fbaa9afd0f.png

获取到了这个初始值了呢。读取字段值是通过“get”方法,那给这个字段赋值会不会是“set”方法呢,我们来试试看吧。继续上下一道代码。

960e14209084e9bfa062bc713b12e004.png

这段代码使用了字段(Field对象)的set方法进行赋值。set方法有两个参数,第一个参数是字段所属对象,第二个参数为要给字段赋值的内容。

这里赋值后,我又做了一下读取并输出,用来验证一下是不是为字段赋值成功。

一起来看下执行结果吧。

6e44222e8d6e8ed68bdee57d9b005feb.png

从执行结果来看是成功完成对字段的赋值了。

静态字段的读写

有了上面的例子,和前面几篇文章,想必大家已经知道怎么通过反射对静态字段进行读写了,一起来看看下面的代码是不是你想的那样呢。

92c4c9ab2e49759713ca559523906aa5.png

这里就不再分两次说明了,把读写都写在一起了。先通过反射读取原始初始化的内容,然后通过反射赋新值,最后通过反射读取新值,并输出。

这段代码中想必大家已经注意到了,对静态字段做读写操作,调用get、set方法时需要传字段所属对象的参数传null即可。因为静态字段是不属于对象的,是属于这个类的。

看看执行结果,是不是我们预想的样子吧。

2a67754b21ad3ceed644d9d1c212ac1b.png

执行完成,与我们的预期是一样的。

好了,今天的内容就到这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值