java.lang.reflect.Field类,即--Field类?及常用方法?

java.lang.reflect.Field

1、Field类:主要是用来辅助 获取和操作 类的属性。

                    为我们提供了获取当前对象的成员变量的 全部属性信息和重新设值 的方法。

                    利用类型类反射该类型中的所有属性和方法

2、Field类的实例:描述了 类型类 的全部属性信息。

                           (包括:属性名称字段、属性类型、属性修饰符、属性注解 等等)

备注:类型类 --是指代表一个 类型 的类。比如说对象是你我他,那你我他 类型的类就是“人”。

3、应用获取类的属性信息

思路--先获得某个对象的 类型类对象,然后借此获取Field类的实例,最后调用Field类的方法获取属性

①获得类型类

Java中一切都是对象,一般所使用的对象都直接或间接继承自Object类。

Object类中包含一个方法名叫getClass(),利用这个方法就可以获得一个类型类的实例对象。

示例:Object obj = new Object();

所有的类型类都是Class类的实例-->Class clazz = obj.getClass();

另外一种写法,Object.class(注意是大写的O,obj.getClass()==Object.class)

在Java中表示一个特定类型的类型类可以用“类型.class”的方式获得。(即,Object.class)

注意--类型类是一一对应的,父类的类型类和子类的类型类是不同的。

②借此获取Field类的实例

clazz 是Class类的实例,直接调用Class中提供了4个相关的方法就OK。

(冒号后面的是方法返回的类型)

getField(String name):Field---用于返回一个指定名称的属性,但是这个属性必须是公有的,

                                               这个属性可以在父类中定义。如果是私有属 性或者是保护属

                                               性,那么都会抛出异常提示找不到这个属性。

getFields():Field[]---是返回类型中的所有公有属性,所有的私有属性和保护属性都找不到。

getDeclaredField(String name):Field---获得在这个类型的声明中定义的指定名称的属性,

                                                              这个属性必须是在这个类型的声明中定义,但可以

                                                              使私有和保护的。

getDeclaredFields():Field[]---获得在这个类型的声明中定义的所有属性,包括私有和保护的

                                              属性都会被返回,但是所有父类的属性都不会被返回。

③调用Field类的方法获取属性

getType():Class---获得该属性的类型。

getName():String---获得属性名称。

isAccessible():boolean---判断该属性是否是可以访问,通常私有和保护的类型都是不可以访问。

setAccessible(boolean flag)---设置该属性是否可以访问

field.setAccessibe(true)属性可以访问--即获取访问权限(field是Field类的实例)

isArray():boolean---判断该类型是否是数组。

isEnum():boolean---判断该类型是否是枚举类型。

isInterface():boolean---判断该类型是否是接口。

isPrimitive():boolean---判断该类型是否是基本类型。

getSuperClass():Class---获得该类型的直接父类,若没有直接父类,那么返回null。

getInterfaces():Class[]---获得该类型实现的所有接口。

getComponentType():Class---如果该类型是一个数组,那么返回该数组的组件类型。

4、异常

IllegalAccessException - Field对象正在执行Java语言访问控制,并且底层字段无法访问。

IllegalArgumentException - 指定的对象不是声明底层字段(或其子类或实现者)的类或接口的实例。

NullPointerException - 指定的对象为null,该字段为实例字段。

ExceptionInInitializerError - 由此方法引发的初始化失败。

5、扩展:Java中所有的属性信息都用Field表示,所有的方法信息都用Method表示,

                这两个类都是java.lang.reflect包中的类。

6、若对你有所帮助请点个赞。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值