java反射的三个阶段:
import java.lang.reflect.Method;
/**
* 反射的三个阶段,分别获取类的对象
* */
public class ReflectAccessDemo {
public static void main(String[] args) throws Exception {
reflectAccess1();
reflectAccess2();
reflectAccess3();
}
// 源文件阶段,此阶段只知道java源文件,通过java源文件获取对象
public static void reflectAccess1() throws Exception {
Class<?> clazz = (Class<?>) Class.forName("java.lang.String");
System.out.println(clazz.getName());
}
// 类加载阶段,此阶段知道具体的java类,通过java类获得具体的对象
// 主要用于传参
public static void reflectAccess2() throws Exception{
String str = "abc";
Class<String> clazz = String.class;
Method method = clazz.getMethod("charAt", int.class);
char c = (char) method.invoke(str, 1);
System.out.println(c);
}
//Runtime,运行时阶段,通过 对象反向获得类
public static void reflectAccess3() throws Exception{
String str = "abc";
Class<?> clazz = (Class<?>) str.getClass();
System.out.println(clazz.toString());
}
}