Class类与Java反射

反射

  通过将java的反射机制,程序员可以更深入得控制程序的运行过程,如在程序运行时对用户输入的信息进行验证 还可以逆向控制程序的执行过程
 从JDK1.5开始 又新增了Annotation功能,该功能建立在反射机制的基础上。

 Class类与java反射

通过Java反射机制,可以在程序中访问已经装载到JVM中的Java对象的描述,实现访问、检测和修改描述Java对象本身信息的功能。Java反射机制的功能过十分强大,在java.lang.reflect包中提供了该功能过的支持。

java.lang.reflect包的描述

提供类和接口,以获得关于类和对象的反射信息。在安全限制内,反射允许编程访问关于加载类的字段、方法和构造方法的信息,并允许使用反射字段、方法和构造方法对其底层对等项进行操作。

如果必需的 ReflectPermission 可用,则 AccessibleObject 允许抑制访问检查。

Array 提供动态创建和访问数组的静态方法。

此包中的类以及 java.lang.Class 可以适应以下应用程序的需要:调试程序、解释程序、对象检查程序、类浏览程序,以及服务(比如,Object Serialization 和 JavaBean,它们需要访问目标对象(基于其运行时类)的公共成员或给定类声明的成员)。

从以下版本开始:JDK1.1


众所周知,所有Java类均继承了Object类,在Object类中定义了一个getClass()方法,该方法返回一个类型为Class的对象。利用Class类返回的对象,我们可以访问该返回对象的描述信息。

通过反射可访问的主要描述信息
组成部分 访问方法 返回值类型 说明
包路径 getPackage() Package对象 获得该类的存放路径
类名称 getName() String对象 获得该类的名称
继承类 getSuperclass() Class对象 获得该类的继承类
实现接口 getInterfaces() Class型数组 获得该类实现的所有接口

getConstructors() Constructor型数组 获得所有权限为public的构造方法

getConstrucor(Class<?>..parameterTypes) Constructor对象 获得权限为public的指定构造方法
构造方法 getDeclaredConstructors() Constructor型数组 获得所有构造方法,按声明顺序返回

getDeclaredConstructor(Class<?>..parameterTypes) Constructor对象 获得指定构造方法

getMethods() Method型数组 获得所有权限为public的方法

getMethods(String name,Class<?>...parameterTypes)
Method对象 获得权限为public的指定方法
方法 getDeclaredMethods() Method型数组
获得所有方法,按声明顺序返回

getDeclaredMethod(String name,Class<?>...parameterTypes)
Method对象
获得指定方法

getFields()
Field型数组 获得所有权限为public的成员变量

getField(String name)
Field对象 获得权限为public的指定成员变量
成员变量 getDeclaredFields() Field型数组
获得所有成员变量,按声明顺序返回

getDeclaredField(String name)
Field对象
获得指定成员变量
内部类 getClass() Class型数组 获得所有权限为public的内部类

getDeclaredClass() Class型数组 获得所有内部类
内部类的声明类 getDeclaringClass() Class对象 如果该类为内部类,则返回它的成员类,否则返回null








访问构造方法

有上表可以看出,通过一组访问方法来访问构造方法是,将返回Constructor类型的数组或对象。每个Constructor对象代表一个构造方法,利用Constructor对象可以操作相应的构造方法。

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_41978199/article/details/80663080