反射
反射就是,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,并且能改变它的属性
反射机制允许程序在运行时取得任何一个已知名称的class的内部信息,包括其修饰符modifiers,属性fields,方法methods等,并可以在运行时改变fileds内容或者调用methods,那我们就可以更灵活地编写代码,代码可以在运行时装配,无需在组件之间进行源代码链接,降低代码的耦合度;还有动态代理的实现等等
Class
= new Person();
Person p Class c1 = p.getClass();
Class c2 = Person.class;
Class c3 = Class.forName("com.ys.reflex.Person");
一个类在JVM中只会有一个Class实例,若我们对获取到的c1,c2和c3用equals比较,发现都是true
.getName(); // 获取类的完整名字
c.getFields(); // 获取类的public类型的属性
c.getDeclaredFields(); // 获取类包括private声明的和继承的所有属性
c.getMethod(String name, Class[] parameterType); // 获取类的特定方法
c.getConstructors(); // 获取类的public类型的构造方法
c.getConstructors(Class[] parameterTypes); // 获取类的特定构造方法
c.newInstance(); // 通过类的不带参数的构造方法,创建一个对象 c