1. 概述
Java反射(Java Reflection)是Java语言中一个非常强大的工具,能够让我们在运行时分析类的能力以及在对象上调用方法。
这篇文章将详细介绍Java反射中的三种主要方法:获取Class对象、获取构造方法、以及获取成员方法。
2. 获取Class对象
第一步在使用反射时,我们需要获取到类的Class对象。
Java为每个类型的类创建一个Class对象,它包括类的元数据,如类名、父类、接口、构造器、方法、字段等。我们有三种方式来获取Class对象。
- 使用类的.class语法,例如:
Class c = String.class;
- 使用对象的getClass()方法,例如:
String s = "example"; Class c = s.getClass();
- 使用Class类的静态方法forName(String className),例如:
Class c = Class.forName("java.lang.String");
3. 获取构造方法
获取构造方法是反射的第二步。构造方法能够帮助我们创建类的新实例。
一旦我们有了类的Class对象,我们就可以获取其所有的构造方法。可以通过如下代码来获取:
Constructor[] constructors = c.getConstructors();
然后,我们可以使用Constructor类的newInstance()方法来创建这个Class的新实例。
例如,下面的代码创建了一个String类的新实例:
Constructor constructor = String.class.getConstructor(String.class);
String s = constructor.newInstance("example");
4. 获取成员方法
最后一步就是获取类的所有成员方法,我们可以通过Class对象的getMethods()方法来获取类的所有公有成员方法,包括其继承的父类或接口的方法。
如果我们想获取所有的成员方法,无论其访问权限,可以使用getDeclaredMethods()方法。
Method[] methods = c.getMethods();
每个Method对象代表一个成员方法,我们可以调用invoke()方法来执行该方法:
Method method = String.class.getMethod("substring", int.class);
String s = (String) method.invoke("example", 2);
在上述代码中,我们获取了String类的substring方法,并在”example”字符串上执行了这个方法,从而得到了结果字符串。
5. 结论
Java反射是一个强大的工具,它提供了一种动态操作Java对象的能力。
以上我们介绍了Java反射中的三种主要方法:获取Class对象、获取构造方法、以及获取成员方法。