Java反射函数实用手册:Class,newInstance,invoke 等
Java反射是指在程序运行期间动态地获取类的信息并进行操作。在Java中,反射的核心类是java.lang.Class类,这个类描述了Java中的类的相关信息,比如类的构造器、方法、变量以及注解等。使用Java反射可以获取类的各种信息,也可以在运行时调用类的方法和构造器。本篇文章将重点介绍Java中反射常用的方法:Class,newInstance,invoke等。
1. Class类
Class类是Java反射的核心类,每个类在生成时都会产生一个Class对象,它保存了这个类的相关信息。使用Class类可以获取类的构造器、方法、变量和注解等信息。Class类提供了如下常用方法:
1.1 getName()
获取当前Class对象描述的类的名称。
1.2 getSimpleName()
获取当前Class对象描述的类的简单名称。
1.3 getModifiers()
获取当前Class对象描述的类的修饰符的整数表示,可以使用Modifier类解析这个整数表示。
1.4 getFields()
获取当前Class对象描述的类所有的public字段列表。这个方法返回一个Field数组,其中每一个元素表示一个public字段。
1.5 getDeclaredFields()
获取当前Class对象描述的类所有的字段列表,包括private和protected字段。这个方法返回一个Field数组,其中每一个元素表示一个字段。
1.6 getMethods()
获取当前Class对象描述的类所有的public方法列表。这个方法返回一个Method数组,其中每一个元素表示一个public方法。
1.7 getDeclaredMethods()
获取当前Class对象描述的类所有的方法列表,包括private和protected方法。这个方法返回一个Method数组,其中每一个元素表示一个方法。
1.8 getConstructors()
获取当前Class对象描述的类所有的public构造器列表。这个方法返回一个Constructor数组,其中每一个元素表示一个public构造器。
1.9 getDeclaredConstructors()
获取当前Class对象描述的类所有的构造器列表,包括private和protected构造器。这个方法返回一个Constructor数组,其中每一个元素表示一个构造器。
2. newInstance方法
newInstance方法用于创建类的实例,它是在Class对象上调用的一个方法。newInstance方法不仅可以创建某个类的实例,还可以创建数组等。如果想要使用newInstance方法创建某个类的实例,这个类必须有一个无参的构造器,并且这个构造器必须是public修饰的。
下面是newInstance方法的基本使用:
Class<?> clazz = Class.forName("com.example.Test");
Object object = clazz.newInstance();
上面的代码使用了forName方法获取Test类的Class对象,然后使用newInstance方法创建了一个Test类的实例。
3. invoke方法
invoke方法用于在实例上调用方法,它是在Method对象上调用的一个方法。invoke方法的参数是一个Object类型的实例和一个Object类型的可变参数列表,这个可变参数列表表示方法调用时的参数列表。invoke方法的返回值是方法的返回值。
下面是invoke方法的基本使用:
Class<?> clazz = Class.forName("com.example.Test");
Object object = clazz.newInstance();
Method method = clazz.getMethod("testMethod", String.class);
Object result = method.invoke(object, "test");
上面的代码使用了forName方法获取Test类的Class对象,并使用newInstance方法创建了一个Test类的实例。然后通过getMethod方法获取了testMethod方法的Method对象,最后使用invoke方法调用了Test类的testMethod方法。
Java反射是Java语言的一大特色,使用Java反射可以在程序运行时获取类的相关信息,还可以在运行时调用类的构造器和方法。但是要注意,使用反射会对性能产生影响,因此在日常开发中应尽量减少反射的使用。
