当程序运行时,程序中的每一个类都会被加载到堆内存中。生成且尽每个类仅生成一个Class对象。这个对象保存了整个类的结构信息,包括这个类的所有属性与方法甚至注解。就像一面镜子一样。所以我们称之为反射。
当我们说反射时,说的就是Class类。
java.lang.Class类保存了每一类的唯一一个对象。如下,当我们使用Class.forName()创建两个Class引用时,它们指向同一个对象。
每一个类包括基础数据类型的八大类及String、各基础数据类型对应的数组,枚举、接口、甚至Annotation注解。
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
String path = "_20200103_reflection.Test";
Class c1 = Class.forName(path);
Class c2 = Class.forName(path);
System.out.println(c1.hashCode());
System.out.println(c2.hashCode());
}
}
//运行结果
705927765
705927765
public class Demo01 {
public static void main(String[] args) throws ClassNotFoundException {
String path = "_20200103_reflection.User";
User u = new User();
//获取Class对象的三种方式:
//1.Class.forName(包名.类名)
Class<?> c1 = Class.forName(path);
//2.已知类,直接:类.class
Class<?> c2 = _20200103_reflection.User.class;
//3.已知实例。实例.getClass()
Class<?> c3 = u.getClass();
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
}
}
//运行结果
class _20200103_reflection.User
class _20200103_reflection.User
class _20200103_reflection.User
getName() //获取全路径类名
getSimpleName() //获取类名
原文:https://www.cnblogs.com/Scorpicat/p/12145061.html