Java反射是指Java程序能够在运行时动态的获取类的相关信息以及执行类的方法和属性的能力。其主要是利用Java API中的Class类和相关的API实现的。
首先,可以通过Class.forName()方法获取一个类的Class对象,或者通过对象的getClass()方法也可以获取该对象的Class对象。如下所示:
Class clazz1 = Class.forName("com.example.TestClass");
Class clazz2 = new TestClass().getClass();
接下来,可以使用Class类提供的一些方法来获取有关这个类的信息,如获取类的名称、父类、接口、方法等等。例如,可以使用以下方法获取类的所有方法:
Method[] methods = clazz1.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method.getName());
}
还可以利用Class类的newInstance()方法通过反射来创建一个对象,如下所示:
Object obj = clazz1.newInstance();
或者可以使用Constructor类提供的newInstance()方法来创建一个对象:
Constructor constructor = clazz1.getDeclaredConstructor();
constructor.setAccessible(true);
Object obj = constructor.newInstance();
除此之外,还可以利用反射来设置和获取对象的属性以及执行对象的方法。例如,可以使用以下方法来设置对象的属性:
Field field = clazz1.getDeclaredField("fieldName");
field.setAccessible(true);
field.set(obj, "Hello World!");
可以使用以下方法来获取对象的属性:
Field field = clazz1.getDeclaredField("fieldName");
field.setAccessible(true);
Object value = field.get(obj);
可以使用以下方法来执行对象的方法:
Method method = clazz1.getDeclaredMethod("methodName", String.class);
method.setAccessible(true);
method.invoke(obj, "parameterValue");