java 反射的相关知识点

反射的原理 (检验一个程序员是菜鸟,还是高级,有三个标准,命名方式,bug调试,对反射的理解程度)

     》应用在一些通用性比较高的代码中

      》后面学到的框架,大多数都是使用反射来实现的

      》在框架的开发中,都是基于配置文件开发的,在配制文件中配置了类或类中的方法,可以通过反射得到类中的,所有内容,可以让类中的某个方法来执行。

     ** 类中的所有内容: 属性 ,没有参数的构造主法,有参数的构造方法,普通方法

使用Class 得到这个类中的所有的内容,属性 构造方法 普通方法

 使用反射的三种方式 {  1, 类名.class

                     2.对象.getClass()

                      3.使用Class.forName("路径+类名")

使用反射操作构造方法

示例:

Class clazz1 = Person.Class;

Class clazz2 = new Person().getClass();

Class clazz2 = new.forName("cn.day103.Person");

》不用使用 new 来实例化类操作    无参数构造方法

          Class clazz2 = new.forName("cn.day103.Person");

          (Person) clazz2.getDeclaredConstructor().newInstance(); // jdk 9 及以上版本,推荐用 这个方法

            (Person) clazz2.newInstance(); //jdk 9 以下版本用 这个方法

》操作    有参数的构造方法

          Class clazz2 = new.forName("cn.day103.Person");

          Constructor cs =  class2.getConstructor(String.class,String.class);

        //String 为实现类的,类型, class 为格式, 如果是传入int类型,则为,int.class

         Person p1 = (Person)  cs.newInstance("lishi","100");

          getName() //获取

》操作类的属性

      Class c2 = new.forName("cn.day103.Person");

      c2.getDeclaredFields(); // 得到所有的属性   

     Field f1 = c2.getDeclaredFields("name"); //得到name 属性

//设置name的值

Person p1 = (Person)  cs.newInstance();

f1.setAccessible(true);//设置可以操作私有属性

f1.set(p1, "wangwu"); 相当于在p.name = "wangwu";

》使用泛型操作普通方法

Class c2 = new.forName("cn.day103.Person");

c2.getDeclaredMethods(); //得到所有的方法

Method  m1 = c2.getDeclaredMethods("setName","String.class"); // 得到setName方法

Person p1 = (Person)  cs.newInstance();

m1.invoke(p1,"李明"); 往setName方法设置一个值

p1.getName() // 看看是否有这个值

操作静态方法

猜你喜欢

转载自blog.csdn.net/weixin_41957098/article/details/88718392