浅谈java中的反射

浅谈java中的反射

  • 什么是反射

    • 概念: 主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(通俗的讲反射就像一个人在照镜子通过镜子来反映出你的外貌特征 体型等特点)
  • 为什么使用反射

    • 如果在一个程序中实例化一个类我们通常是使用new关键字来进行对象的创建,如果我们需要改变实例化对象就必须改变源代码,我们知道如果改变一个正确的源代码是非常可怕的,会带来意想不到的错误。这时候就用到了反射这个特性,如在java中 我们可以通过Class.forName("类名").newInstance() 来进行类的实例化,这样在不改变源代码的情况下完全可以动态的修改类的属性方法等。
  • 使用反射有什么好处

    • 使得编码更加灵活(例如spring 的xml 文件就是使用反射来进行类的实例化,如果不使用反射那这些类就的硬编码在代码里了)
    • 类与类之间耦合度更低
  • 到底怎么使用反射

    • 在java中有四种方式来获取类的属性,方法等:
      • 目标类
           @Builder(toBuilder = true)
           @Getter
           public class User {
               private  String name;
               private  String age;
           }
        
      • 解释:@Builder注解是lombok的注解,它旨在构建实体对象类时候不提供setter方法只提供getter方法, 所有属性私有,在进行类的实例化时候通过使用类的builder方法进行属性的赋值。使得代码更加优雅,不对外公开类的写操作。
      • 实现代码
        @Test
          public void reflectDemo() throws ClassNotFoundException {
              //第一种(使用实例化的对象进行反射)
              User user = User.builder()
                              .name("张三")
                              .age("李四")
                              .build();
              Class<? extends User> aClass = user.getClass();
              System.out.println("使用实例:"+aClass.getName());
              //第二种
              Class<?> aClass1 = Class.forName("bean.User");
              System.out.println("使用类静态方法:"+aClass1.getName());
              //第三种
              System.out.println("使用User类的class方法:"+User.class.getName());
              //第四种
              Class<?> user1 = this.getClass().getClassLoader().loadClass("bean.User");
              System.out.println("使用类加载器:"+user1.getName());
          }
        
        以上只是简单的获取类的名称 反射还有很多方法(如获取类的实现接口,类的注解等)请自行百度javaAPI文档进行学习。
  • 注意:由于反射机制模糊了代码的内部逻辑,所以一般普通的程序不太推荐使用反射来进行构建,会使得系统复杂度增加难以维护。一般反射用在系统对灵活性以及可扩展性有较高要求的框架中(如Spring全家桶大量使用了反射机制)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值