java语言的反射机制
java语言的反射机制
反射:
在java运行环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?
这种动态获取类的信息以及动态调用对象的方法的功能来自于java语言的反射机制(Reflection)
反射机制的主要提供了以下功能
1、在运行时判断任意一个对象所属的类。
2、在运行时构造任意一个类的对象
3、在运行时判断任意一个类所具有的成员变量和方法
4、在运行时调用任意一个对象的方法
在JDK中,主要由以下类来实现java反射机制,在java.lang.reflect包中
class类:代表一个类
Field类:代表类的成员变量
Method类:代表类的方法
Constructor类:代表类的构造方法
Array类:提供了动态创建数组,以及访问数组的元素的静态方法
Object 类
getClass():返回此 Object 的运行时类。
类 Class
Class 类的实例表示正在运行的 Java 应用程序中的类和接口
String.class 的类型是 Class<String>。如果将被建模的类未知,则使用 Class<?>
常用方法:
forName(String className)方法:返回与带有给定字符串名的类或接口相关联的 Class 对象
newInstance()方法:创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化这个类。
getName() 方法:以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
getFields()方法:获得类的public类型的属性:
getMethods()方法:获得类的public类型的方法:
getMethod(String name,Class<?>... parameterTypes)方法:
获得类的特定的方法:
name 参数是一个 String,用于指定所需方法的简称。parameterTypes 参数是按声明顺序标识该方法形参类型的 Class 对象的一个数组。
?
Method 类;
Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息
invoke(Object obj,Object... args)方法:
对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
如果底层方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null。
如果底层方法所需的形参数为 0,则所提供的 args 数组长度可以为 0 或 null。
setAccessible(boolean flag)方法:
将此对象的 accessible 标志设置为指示的布尔值。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。
?
Field 类:
Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。
set() 方法:
将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
?
?
?
?
?
?
?
?
?