java反射学习

首先,要明白反射是什么!
反射:将类的组成部分封装成其他对象。
咋看一眼必然看不懂……咱们来解释解释。
第一个问题:类的组成部分有哪些?
无非就是成员变量、成员方法、构造方法。你说还有静态代码块、代码块之类的?对不起现在请先忽略它们。
好了,反射的意思就是把类的成员变量、成员方法、构造方法封装成其他对象……
这也挺难懂的吧……
再继续深入的解释!
知道类加载吧,就是把编译好的字节码文件加载到JVM等待使用;JVM中,万物皆对象,那么加载进来的字节码文件用什么来存?
一个名字叫做Class的类对象,而字节码文件被编译好的内容(类的成员变量、成员方法、构造方法)用什么来表示呢?
如图:
class类对象图
好了,反射就是成员变量封装成一个Field对象这样子……

反射的好处:
……

class对象的功能。
1.获取成员变量:
Field getField(string name)//获取指定名字的public成员变量
Field[] getFields()//获取所有public成员变量
Field getDeclaredField(string name)获取指定名字的成员变量,不管访问控制符
Field[] getDeclaredFields()

private 修饰的成员变量就算拿到了也不能直接使用……
可以通过Field对象调用一个暴力反射的方法setAccessible(true)来实现访问private变量。
当真要获得一个可以用来操作的成员变量,可以通过field变量的get操作,不过需要将其原来的对象当作参数传给field对。
举个栗子
反射获取变量举例
2.获取构造方法:
Constructor getConstructor(参数的类)
constructor[] getConstructors()
constructor[] getDeclaredConstructors()
constructor getDeclaredConstructors(参数的类)

constructor对象可以调用newInstance(若干参数)来构造一个对象出来,如果是调用无参数的构造方法new一个对象,也可以用更加省事的class对象的newInstance()来实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值