此外访问字段还可以读取和修改对象的字段,非public字段可以调用setAccessible(true)来访问(前提是JVM运行期存在SecurityManager没有进行限制)。
反射(Reflection)是程序在执行期间借助于Reflection API取得任何类的内部信息,并且能直接操作任意对象的内部属性及方法。
- Class类
Class类是Reflection的根源,class类是由JVM在执行过程中由类加载器动态加载的,如下如图所示。Class对象是Class类的实例,获取一个class对应的Class实例后,就可以获取该class的所有信息;通过Class实例获取class信息的方法称为反射(Reflection);
2.访问字段
Class类访问字段的方法主要有
- Field getField(name):根据字段名获取某个public的field(包括父类)
- Field getDeclaredField(name):根据字段名获取当前类的某个field(不包括父类)
- Field[] getFields():获取所有public的field(包括父类)
- Field[] getDeclaredFields():获取当前类的所有field(不包括父类)
而对于Field对象有如下方法
- getName():返回字段名称;
- getType():返回字段类型,也是一个Class实例;
- getModifiers():返回字段的修饰符,它是一个int,不同的bit表示不同的含义。字段修饰符对应关系如下
- PUBLIC: 1
- PRIVATE: 2
- PROTECTED: 4
- STATIC: 8
- FINAL: 16
- SYNCHRONIZED: 32
- VOLATILE: 64
- TRANSIENT: 128
- NATIVE: 256
- INTERFACE: 512
- ABSTRACT: 1024
- STRICT: 2048
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.