java学习之反射机制
java学习之反射机制
反射机制
反射机制指在程序运行过程中,对任意一个类都能获取其所有属性和方法,并且对任意一个对象都能调用其任意一个方法。这种动态获取类的和对象的信息,以及动态调用对象的方法的功能被称为java语言的反射机制。
反射机制的核心功能:java中的对象有两种类型:编译时类型和运行时类型。编译时类型指的是在声明对象时采用的类型。运行时类型指的是为对象赋值时采用的类型。程序在编译期间,无法预知该对象和类的真实信息,只能通过运行时信息来发现该对象和类的真实信息,而其真实信息(对象的属性和方法)通常通过反射机制来和获取,这便是java的反射机制的核心功能。
Person person=new Student();
person对象的编译时类型为Person,但是运行时类型为Student
Java的反射API
java的反射API主要用于在运行过程中动态生成类、接口或对象等信息。其常用的API如下:
* class类:用于获取类的属性,方法等信息
* Field类:表示类的成员变量,用于获取和设置类中的属性值
* Method类:表示类的方法,用于获取方法的描述信息或者执行某个方法
* Constructor类:表示类的构造方法
反射的步骤
反射的步骤如下:
* 获取想要操作的类的class对象
ClassLoader classLoader = EsSinkTest.class.getClassLoader();
Class<?> aClass = classLoader.loadClass("com.sgg.apitest.Test1");
- 获取Method对象:通过调用Class对象的getMathod(String name,Class<?>... parameterTypes)返回一个Method对象,它描述了此Class对象所表示的类或者接口指定的公共成员方法。name,用于指定所需方法的名称。parameterTypes 按声明顺序标志该方法的形参类型的Class对象的一个数组。parameterTypes为null,则按空数组处理。
Method main_test = aClass1.getMethod("main", String[].class);
- 调用invoke方法:通过调用Method对象的invoke方法来动态执行函数
main_test.invoke(null,new Object[]{new String[]{}});