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() // 看看是否有这个值

操作静态方法

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值