# Reflect **Repository Path**: RngS11/reflect ## Basic Information - **Project Name**: Reflect - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-05-10 - **Last Updated**: 2022-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 反射整理 学习代码[下载](http://file.bcscb.xyz/Reflect.rar) 顺序为 Main(Cat,re,properties)->Demo1->Demo02->ReflectCreateInshance->ReflectAccessProperty ->ReflectAccessMethod 主要不同: 传统写法 对象.成员变量 反射写法:成员变量对象.get(对象) > Java Reflection 反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息(比如成员变量,构造器,成员方法等等),并能操作对象的属性及方法。反射在设计模式和框架底层都会用到 加载完类之后,在堆中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象包含了类的完整结构信息。通过这个对象得到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,形象的称之为:反射。 ![Java反射机制原理示意图](https://cdn.bcscb.xyz/img/image-20220509211045958.png) * Java反射机制可以完成 1. 在运行时判断任意一个对象所属的类 2. 在运行时构造任意一个类的对象 3. 在运行时得到任意一个类所具有的成员变量和方法 4. 在运行时调用任意一个对象的成员变量和方法 5. 生成动态代理 * 反射相关的主要类 1. java.lang.Class:代表一个类,Class对象表示某个类加载后在堆中的对象 2. java.lang.reflect.Method:代表类的方法,Method对象表示某个类的方法 3. java.lang.reflect.Field:代表类的成员变量,Field对象表示某个类的成员变量 4. java.lang.reflect.Constructor:代表类的构造方法,Constructor对象表示构造器 > Tips 按理来说获取/修改的东西只能是public修饰的,但是反射可以通过**暴破走后门**,详情见代码 ### 优缺点 优点:可以动态的创建和使用对象(也是框架底层的核心),使用灵活,没有反射机制,框架技术就失去底层支撑 缺点:使用反射基本是解释执行,对执行速度有影响。 补充: **优化** 1. Method和Field、Constructor对象都有setAccessible()方法 2. setAccessible作用是启动和禁用访问安全检查的开关 3. 参数值为true表示 反射的对象在使用时取消访问坚持,提供反射效率。参数值为false则表示反射的对象执行访问检查。 *我的评价是:能提升,但只能一点点* ![通过反射获取类结构信息](https://cdn.bcscb.xyz/img/image-20220509222206209.png)