关于反射
一、反射的思想:在程序运行过程中确定和解析数据类的类型。 不适用反射,直接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个特点:增加程序的灵活性、破坏类的封装性以及性能损耗
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)