反射
反射简介
衰小孩、519
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
反射机制总结
反射存在意义 反射原理和机制 反射相关的主要类 反射优点和缺点 Class类 拥有Class类的类型 类加载 通过反射获取类结构 通过反射创建对象 通过反射访问类中属性 通过反射访问类中方法原创 2021-10-07 10:51:46 · 76 阅读 · 0 评论 -
通过反射访问类中方法
根据方法名和参数列表获取 Method 方法对象 Method m = clazz.getDeclaredMethod(方法名,xx.class) 获取对象 Object o = clazz.newInstance 暴破 m.setAccessible(true) 访问 Object retVal = m.invoke(o,实参列表) 注意:如果是静态方法,则 invoke 的参数 o 可以写成 null package com.ftn.reflection.question; import java.原创 2021-10-07 10:51:26 · 122 阅读 · 0 评论 -
通过反射访问类中属性
根据属性名获取 Field 对象 Field f = clazz对象.getDeclaredField(属性名) 暴破: f.setAccessible(true); 访问 f.set(o,值) sout(f.get(o)) 如果是静态属性,则set和get中的参数o可以为null package com.ftn.reflection.question; import java.lang.reflect.Field; //演示反射操作属性 public class ReflectAccessProp.原创 2021-10-04 20:52:43 · 110 阅读 · 0 评论 -
通过反射创建对象
反射创建对象 .通过 public 的无参构造器创建实例 通过 public 的有参构造器创建实例 通过 private 的有参构造器创建实例 package com.ftn.reflection.question; import java.lang.reflect.Constructor; //通过反射创建对象 public class ReflectCreateInstance { public static void main(String[] args) throws Excepti原创 2021-10-04 20:40:18 · 113 阅读 · 0 评论 -
通过反射获取类的结构信息
第一组 api0_1 Java.lang.Class 类 第二组 api0_2 Java.lang.reflect.Field 类 getModifiers:以 int 形式返回修饰符(默认修饰符是0,public 是1,private 是2,protected 是4,static 是8,final 是16) getType:以 Class 形式返回类型 getName:返回属性名 第三组 api0_3 Java.lang.reflect.Method 类 getModifiers:以 int 形式返原创 2021-10-04 20:32:42 · 132 阅读 · 0 评论 -
类加载的五个阶段
一、加载阶段 JVM在该阶段的主要目的是将字节码从不同的数据源(可能是class文件,也可能是jar包,甚至网络)转化为二进制字节流加载到内存中,并生成一个代表该类的 java.lang.Class 对象 二、连接阶段–验证 目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全 包括:文件格式验证(是否以魔数 oxcafebabe 开头)、元数据验证、字节码验证和符号引用验证 可以考虑使用 -Xverify:none 参数来关闭大部分的类验证措施 三、连接原创 2021-10-04 19:35:19 · 1283 阅读 · 0 评论 -
动态加载和静态加载
反射机制是Java实现动态语言的关键,也就是通过反射实现类动态加载 静态加载 编译时加载相关的类,如果没有则报错,依赖性太强 动态加载 运行时加载需要的类,如果运行时不用该类,即使该类不存在,也不会报错,降低了依赖性 类加载时机 当创建对象时(new) //静态加载 当子类被加载时,父类也加载 //静态加载 调用类中的静态成员时 //静态加载 通过反射 //动态加载 类加载流程图 ...原创 2021-10-04 17:09:28 · 1036 阅读 · 0 评论 -
获取Class类对象
获取方式 前提:已知一个类的全类名,且该类在类路径下,可通过 Class 类的静态方法 forName()获取,可能抛出异常 ClassNotFoundException 应用场景:多用于配置文件,读取类全路径,加载类 前提:若已知具体的类,通过类的 class 获取(例如String类的Class对象就是 String.class),该方式最为可靠,程序性能最高 应用场景:多用于参数传递,比如通过反射得到对应构造器对象 前提:已知某个类的实例,调用该实例的 getClass()方法获取Class对象原创 2021-10-04 16:48:06 · 179 阅读 · 0 评论 -
Class 类介绍
Class 类 Class 也是类,因此也继承了 Object 类 Class 类对象不是new出来的,而是系统创建的 对于某个类的 Class 对象,在内存中只有一份,因为类只加载一次 每个类的实例都会记得自己是由哪个 Class 实例所生成 通过 Class 可以得到一个类的完整结构,通过一系列API Class 对象是存放在堆里的 类的字节码二进制数据,是存放在方法区的,有的地方称为类的元数据 Class类常用方法 Class.forName:获取Car类对应的Class对象 getClass:原创 2021-10-04 16:20:25 · 455 阅读 · 0 评论 -
反射优点和缺点
优点 可以动态的创建和使用对象(也是框架底层核心,使用灵活,没有反射机制,框架技术就失去底层支撑) 缺点 使用反射基本是解释执行,对执行速度有影响 优化–关闭访问检查 Method 和 Field 、Constructor 对象都有 setAccessible()方法 setAccessible()作用是启动和禁用访问安全检查的开关 参数值为 true 表示反射的对象在使用时取消访问检查,提高反射的效率。参数值为 False 则表示反射的对象需要访问检查 package com.ftn.reflecti原创 2021-10-04 15:57:31 · 262 阅读 · 0 评论 -
反射相关类
反射相关类 java.lang.Class 代表一个类,Class对象表示某个类加载后在堆中的对象原创 2021-10-04 15:42:34 · 92 阅读 · 0 评论 -
反射机制简介
反射机制 反射机制允许程序在执行期借助于 Reflection API 取得任何类的内部信息(比如成员变量,构造器,成员方法等),并能操作对象的属性及方法。反射在设计模式和框架底层都会用到 加载完类之后,在堆中就产生了一个 Class 类型的对象(一个类只有一个Class对象),这个对象包含了类的完整结构信息。通过这个对象得到类的结构,所以,形象的称之为反射 java反射机制可以完成: 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时得到任意一个类所具有的成员变量和方法 在运行原创 2021-10-04 15:18:54 · 108 阅读 · 0 评论
分享