Class类与Java反射

通过Java反射机制,可以再程序中访问已经装载到JVM中的Java对象的描述,实现访问、检测和修改Java对象本身信息的功能。利用Class类的对象textFieldC,可以访问用来返回该对象的textField对象的描述信息,可以访问的主要描述信息如下:

通过反射可访问的主要描述信息
组成部分访问方法返回值类型说明
包路径getPackage()Package对象获得该类的存放路径
类名称getName()String对象获得该类的名称
继承类getSuperclass()Class对象获得该类继承的类
实现接口getInterfaces()Class型数组获得该类实现的所有接口
构造方法getConstructors()Constructor型数组获得所有权限为public的构造方法
getConstructor(Class<?>...parameterTypes)Constructor对象获得权限为public的指定构造方法
getDeclaredConstructors()Constructor型数组获得所有构造方法,按声明顺序返回
getDeclaredConstructor(Class<?>...parameterTypes)Constructor对象获得指定的构造方法
方法getMethods()Method型数组获得所有权限为public的方法
getMethod(String name,Class<?>...parameterTypes)Method对象获得权限为public的指定方法
getDeclaredMethods()Method型数组获得所有方法,按声明顺序返回
getDeclaredMethod(String name,Class<?>...parameterTypes)Method对象获得指定的方法
成员变量getFields()Field型数组获得所有权限为public的成员变量
getFiled(String name)Field对象获得权限为public的指定成员变量
getDeclaredFields()Field型数组获得所有成员变量,按声明顺序返回
getDeclaredField(String name)Field对象获得指定的成员变量
内部类getClasses()Class型数组获得所有权限为public的内部类
getDeclaredClasses()Class型数组获得所有内部类
内部类的声明类getDeclaringClass()Class对象如果该类为内部类,则返回它的成员类,否则返回null

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1、访问构造方法

在通过下列一组方法访问构造方法时,将返回Constructor类型的对象或数组。每个Constructor对象代表一个构造方法,利用Constructor对象可以操纵对应的构造方法:

(1)getConstructors()

(2)getConstructor(Class<?>...parameterTypes)

(3)getDeclaredConstructors()

(4)getDeclaredConstructor(Class<?>...parameterTypes)

如果是访问指定的构造方法,需要根据该构造方法的入口参数的类型来访问。

Constructor类中提供的常用方法如下:

Constructor类的常用方法
方法说明
isVarArgs()查看该构造方法是否允许带有可变数量的参数,如果允许则返回true
getParmeterTypes()按照声明顺序以Class数组的形式获得该构造方法的各个参数的类型
getExceptionTypes()以Class数组的形式获得该构造方法可抛出的异常类型
newInstance(Object...initargs)通过该构造方法利用指定参数创建一个该类的对象,如果未设置参数则表示采用默认无参数的构造方法
setAccessible(boolean flag)如果该构造方法的权限为private,默认为不允许通过反射利用newInstance(Object...initargs)方法创建对象。如果先执行该方法,入口参数设置为 true,则允许创建
getModifiers()获得可以解析出该构造方法所采用修饰符的整数

 

 

 

 

 

 

 

 

 

通过java.lang.reflect.Modifier类可以解析出getModifiers()方法的返回值所表示的修饰符信息,在该类中提供了一系列用来解析的静态方法,既可以查看是否被指定的修饰符修饰,还可以以字符串形式获得所有修饰符。该类常用静态方法如下:

Modifier类中的常用解析方法
静态方法说明
isPublic(int mod)查看是否被public修饰符修饰,如果是则返回true
isProtected(int mod)查看是否被protected修饰符修饰,如果是则返回true
isPrivate(int mod)查看是否被private修饰符修饰,如果是则返回true
isStatic(int mod)查看是否被static修饰符修饰,如果是则返回true
isFinal(int mod)查看是否被final修饰符修饰,如果是则返回true
toString(int mod)以字符串的i形式返回所有修饰符

 

 

 

 

 

 

 

 

2、访问成员变量

在通过如下几个方法访问成员变量时,将返回Field类型的对象或数组。每个Field对象代表一个成员变量,利用Field对象可以操纵相应的成员变量。

(1)getFields()

(2)getField(String name)

(3)getDeclaredFields()

(4)getDeclaredField(String name)

如果是访问指定的成员变量,可以通过该成员变量的名称来访问。

Field类的常用方法
方法说明
getName()获得该成员变量的名称
getType()获得该成员变量类型的Class对象
get(Object obj)获得指定对象obj中成员变量的值,返回值为Object型
set(Object obj,Object value)将指定对象obj中成员变量的值设置为value
getInt(Object obj)获得指定对象obj中类型为int的成员变量的值
setInt(Object obj,int i)将指定对象obj中类型为int的成员变量的值设置为i
getFloat(Object obj)获得指定对象obj中类型为float的成员变量的值
setFloat(Object obj,float f)将指定对象obj中类型为float的成员变量的值设置为f
getBoolean(Object obj)获得指定对象obj中类型为boolean的成员变量的值
setBoolean(Object obj,boolean z)将指定对象obj中类型为boolean的成员变量的值设置为z
setAccessible(boolean flag)设置是否忽略权限限制直接访问private等私有权限的成员变量
getModifiers()获得可以解析出该成员变量所常用修饰符的整数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3、访问方法

在通过下面一组方法访问方法时,将返回Method类型的对象或数组。每个Method对象代表一种方法,利用Method对象可以操纵相应的方法。

(1)getMethods()

(2)getMethod(String name,Class<?>...parameterTypes)

(3)getDeclaredMethods()

(4)getDeclaredMethod(String name,Class<?>...parameterTypes)

如果时访问指定的方法,需要根据该方法的名称和入口参数的类型来访问。

Method类的常用方法
方法说明
getName()获得该方法的名称
getParameterTypes()按照声明顺序以Class数组的形式获得该方法的各个参数的类型
getReturnType()以Class对象的形式获得该方法的返回值的类型
getExceptionTypes()以Class数组的形式获得该方法可能抛出的异常类型
invoke(Object obj,Object...args)利用指定参数args执行指定对象obj中的该方法,返回值为Object型
isVarArgs()查看该构造方法是否允许带有可变数量的参数,如果允许则返回true
getModeifiers()获得可以解析出该方法所采用修饰符的整数

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值