关于反射

一、反射的思想:在程序运行过程中确定和解析数据类的类型。  不适用反射,直接new对象的方式,就把对象的类型确定下来了。  反射就相当于开关,可以在运行时才确定使用哪个数据类,在切换类时,无需修改源码、编译程序。

  反射的作用:对于在编译期无法确定使用哪个数据类的场景,通过反射可以在程序运行时构造出不同的数据类实例。

二、反射的主要组成部分:

  • Class:任何运行在内存中的所有类都是该 Class 类的实例对象,每个 Class 类对象内部都包含了本来的所有信息。记着一句话,通过反射干任何事,先找 Class 准没错!
  • Field:描述一个类的属性,内部包含了该属性的所有信息,例如数据类型,属性名,访问修饰符······
  • Constructor:描述一个类的构造方法,内部包含了构造方法的所有信息,例如参数类型,参数名字,访问修饰符······
  • Method:描述一个类的所有方法(包括抽象方法),内部包含了该方法的所有信息,与Constructor类似,不同之处是 Method 拥有返回值类型信息,因为构造方法是没有返回值的。

三、获取 Class 对象的方法有3种:

  • 类名.class:这种获取方式只有在编译前已经声明了该类的类型才能获取到 Class 对象

   Class clazz = .class;

  • 实例.getClass():通过实例化对象获取该实例的 Class 对象
  类 sp = new 类();
  Class clazz = sp.getClass();
  • Class.forName(className):通过类的全限定名获取该类的 Class 对象
  Class clazz = Class.forName("类的全限定名");

  反射的方式有很多种,但是由于jvm类加载机制中的双亲委派模型,内存中只会有一个class对象,总之jvm会保证一个类在内存中至多存在一个class对象。

四、通过反射构造一个类的实例方式有2种:

  Class对象调用newInstance()方法和Constructor构造器调用newInstance()方法。

 

 

 

  • 反射的思想:反射就像是一面镜子一样,在运行时才看到自己是谁,可获取到自己的信息,甚至实例化对象。
  • 反射的作用:在运行时才确定实例化对象,使程序更加健壮,面对需求变更时,可以最大程度地做到不修改程序源码应对不同的场景,实例化不同类型的对象。
  • 反射的应用场景常见的有3个:Spring的 IOC 容器,反射+工厂模式 使工厂类更稳定,JDBC连接数据库时加载驱动类
  • 反射的3个特点:增加程序的灵活性、破坏类的封装性以及性能损耗

  

posted @   古家杰  阅读(36)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示