Java反射是一种机制,可以在运行时检查、调用和实例化类,无需在编译时确定类的名字。使用反射可以动态地获取类的信息,并在运行时操作类的属性、方法和构造函数。
反射常用的方法名及作用介绍如下:
1. `getClass()`:获取对象的Class对象,即获取对象所属的类的信息。
2. `getMethods()`:获取公共方法的数组,包括从父类继承的方法。
3. `getDeclaredMethods()`:获取所有方法的数组,包括私有方法。
4. `getMethod(String name, Class<?>... parameterTypes)`:根据方法名和参数类型获取方法对象。
5. `getDeclaredMethod(String name, Class<?>... parameterTypes)`:根据方法名和参数类型获取私有方法对象。
6. `invoke(Object obj, Object... args)`:调用方法,obj表示调用该方法的对象,args表示方法的参数。
7. `getField(String name)`:根据字段名获取字段对象。
8. `getDeclaredField(String name)`:根据字段名获取私有字段对象。
9. `newInstance()`:创建对象实例。
10. `getConstructor(Class<?>... parameterTypes)`:根据参数类型获取构造函数对象。
11. `getDeclaredConstructor(Class<?>... parameterTypes)`:根据参数类型获取私有构造函数对象。
12. `newInstance(Object... initargs)`:根据构造函数创建对象实例。
通过使用这些反射方法,可以实现一些动态的操作,比如动态调用方法、获取和修改字段的值、创建对象实例等。但是由于反射涉及到动态性和灵活性,效率上可能不如直接调用,因此在使用时需要注意性能问题。