Java中的反射函数:Class、Method、Constructor等用法
Java中的反射机制是Java语言提供的一种强大的机制,可以在程序运行时动态地加载、查找和使用类、方法和构造函数等对象的信息。Java反射能够让程序根据运行时的状态和需求,动态地获得类的信息及调用类的方法。常用反射类的有Class、Method、Constructor等。本文将介绍这几个反射函数的用法。
1.Class类的使用
Class是所有类的类,可以用它来获得类的信息。常用的方法有:
1)获取类对象的方法
使用方法:
- getClass():获取对象的class对象;
- Class.forName(“类名”):获取指定类名的class对象,需指定全路径。例如:Class.forName(“com.test.Test”);
2)获取类对象信息的方法
使用方法:
- getName():获取类名;
- getPackage():获取类所在的包;
- getSuperclass():获取父类;
- getInterfaces():获取实现的接口;
- isInterface():判断是否是接口;
- getModifiers():获取修饰符;
2.Method的使用
Method是描述类中的方法的类,通过Method类可以获取方法签名、修饰符、参数类型等信息。使用方法如下:
- 获取指定方法的Method对象:Class类的getMethod(String name, Class<?>... parameterTypes)方法;
- 调用方法:Method类的invoke(Object object, Object... args)方法。
示例代码:
public class ReflectTest {
public static void main(String[] args) throws Exception {
String s = "hello";
Method method = s.getClass().getMethod("charAt", int.class);
System.out.println(method.invoke(s, 2));
}
}
运行结果:
l
上述代码中,首先创建了一个字符串"hello",然后获取了字符串的charAt方法并通过invoke方法调用了该方法。
3.Constructor的使用
Constructor是描述类中构造函数的类,通过Constructor类可以获取构造函数的修饰符、参数类型等信息。使用方法如下:
- 获取无参构造函数方法:Class类的getConstructor()方法;
- 获取指定参数的构造函数方法:Class类的getConstructor(Class<?>... parameterTypes)方法;
- 调用构造函数:Constructor的newInstance(Object... initargs)方法。
示例代码:
public class ReflectTest {
public static void main(String[] args) throws Exception {
Class<?> clazz = Class.forName("com.test.Test");
Constructor<?> constructor = clazz.getConstructor();
Object obj = constructor.newInstance();
}
}
以上代码中,通过Class.forName方法获取了Test类的Class对象,然后通过getConstructor获取了Test类的无参构造函数方法,最后通过newInstance方法创建了Test类的实例。
总结:
Java反射机制可以让程序根据运行时的状态和需求,动态地获得类的信息及调用类的方法。常用的反射类包括Class、Method、Constructor等。类对象的获取可以使用getClass方法和Class.forName方法;方法的获取可以使用getMethod方法;构造函数的获取可以使用getConstructor方法。通过反射机制动态地调用类的方法和创建对象,可以为动态生成对象和配置提供便利。但是,反射调用在性能上会存在一定的损耗,因此需要在程序设计过程中仔细使用。
