当程序运行时,程序中的每一个类都会被加载到堆内存中。生成且尽每个类仅生成一个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