Java反射

反射

反射就是,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,并且能改变它的属性

反射机制允许程序在运行时取得任何一个已知名称的class的内部信息,包括其修饰符modifiers,属性fields,方法methods等,并可以在运行时改变fileds内容或者调用methods,那我们就可以更灵活地编写代码,代码可以在运行时装配,无需在组件之间进行源代码链接,降低代码的耦合度;还有动态代理的实现等等

Class

Person p = new Person();
Class c1 = p.getClass();
Class c2 = Person.class;
Class c3 = Class.forName("com.ys.reflex.Person");

一个类在JVM中只会有一个Class实例,若我们对获取到的c1,c2和c3用equals比较,发现都是true

c.getName();                                        // 获取类的完整名字
c.getFields();                                      // 获取类的public类型的属性
c.getDeclaredFields();                              // 获取类包括private声明的和继承的所有属性
c.getMethod(String name, Class[] parameterType);    // 获取类的特定方法
c.getConstructors();                                // 获取类的public类型的构造方法
c.getConstructors(Class[] parameterTypes);          // 获取类的特定构造方法
c.newInstance();                                    // 通过类的不带参数的构造方法,创建一个对象