反射 拼搏现实的明天。 2022-04-24 10:00 163阅读 0赞 在反射中如果不使用强制获取私有的方法,无论是再获取成员变量还是方法的时候获取被public修饰的 反射首先获取构造,在获取构造之后才可以获取成员的方法 在java的反射机制都是在运行状态中的,对于任意一个类,都可以知道这个类的所有方法和属性(包括私有),对于人一个类,都能够调用他的任意一个属性和方法,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制 如果想要解刨一个类,首先必须获取到该类的字节码文件对象,而解刨使用的就是class类中的方法,所以先要获取每个字节码文件对应的class 类型的对象 反射使用的三种方式(获取类对象的三种方式) 1,创建对象的形式获取类对象 new Student().getClass() 2,直接类名点calss 获取类对象 Student.class 3,根据类的全路径,进行获取类对象 Class.forName("类的全路径") 反射获取构造方法并使用 通过反射获取构造方法并使用 Construcotr <?> \[\] getConstructors() 获取全部都是都public 修饰的构造方法 Construcotr <?> \[\] getConstructors(Class<?> ... paramenterType) 获取时可以传入指定的字节码文件,获取有参数的构造 Class 类中的 T newInstance() 方法,在创建一个没空参数的实例对象 Constructor 类中的 newInstance()方法,是在获取参数的时候,看传入的参数列表,如果参数列表中有数据,则newInstance() 方法中也需要传入参数 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODI5Nzg3OQ_size_16_color_FFFFFF_t_70][] 下面总结一下反射的使用步骤: 1,首先获取该类的字节码文件对象 在获取该类的字节码文件的时候,有三种方式进行获取上面已经介绍到 2,获取该类中的构造方法(的对象) Constructor <?> \[\] getConstructors(): 查看字节码对象中有哪些构造方法,然后通过getConstructor(Class <?> ... parametType),回去有参数的字节码对象,在这一步只是获取到字节码对象还没有真正的创建对象 3,通过根据构造获取的字节码对象,从而进行实例化对象 在根据构造方法获取的字节码对象,返回Constructor 对象,该对象中有newInstance(Object ...obj ) 的方法,该方法中的参数根据第二步中使用构造获取字节码对象时传递的参数的类型的字节码的参数类型和个数,进行传值,从而实例化该对象 通过反射获取成员变量并使用 在获取的时候,分只获取公共的成员变量和全部的成员变量 公共的成员变量 Field \[\] getFidlds() 获取所有的公共的成员变量 Field getField(String name) : 根据指定的字段名称(成员变量的名称),获取对应的字段对象,但是只能获取public 修饰的 全部的成员变量(包括私有) Field \[\] getDeclaredFields() 获取所有的成员变量(字段名称) Field getDeclarredField(String name ): 根据指定的字段名称(成员变量名),获取对应的字段对象, 强制获取私有的属性 1:获取该类的字节码文件对象 2: 有该类的字节码文件对象,产生一个实例(没有参数) 3: 通过该类的字节码对象,获取指定的字段(字段名称) 4:如果是非public的字段,可以通过getDeclaredField() 获取非public的字段强制获取 5: 去除 public 的权限,使用setAccessable(true) 方法,将public的修饰去掉 6: 对成员变量操作,无论是获取还是修改,只有上面将权限去除掉才可以使用 只有在get和set的时候需要将权限消除 通过反射获取成方法并使用 在获取的时候参数列表中只能传入类型的字节码对象 Method\[\] getMethods() ;返回所有非私有的方法名 Method getMethod(Stirng name,Class<?> .. . paramterType):返回非私有的并且指定参数的方法:拿着传入的参数的类型去字节码对象中中寻找,有匹配的返回Method对象 Method\[\] getDeclaredMethods()返回所有的方法包括私有,但是不返回继承的方法 Method getDeclaredMethod(String name, Class<?>... parameterTypes)返回指定参数的方法包括私有的,就是拿着方法名和参数列表去字节码对象中查找 在上面的操作中,只能传入形参,如果要传入实参,需要下面的方法(就是操作具体的方法,跟上面操作构造函数一般) Object invoe (Object obj ,Object ...args),将制定的数据传入指定的方法中(实参)、 Obj 表示,对象在传入之前的时候,需要指定要把值给那个对象中的方法, 操作方法的步骤: 1: 获取字节码对象 2:获取实例化对象 3:通过字节码文件的对象获取Method对象,这一步只是 反射阶段,可变参数的数据类型字节码文件对象 4; 执行方法,将数据写入,通过Method 对象去调用invoke (实例化对象代表该方法是那个duixiang中的方法,具体的实际操作)返回Object [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODI5Nzg3OQ_size_16_color_FFFFFF_t_70]: /images/20220216/d13b0cb69bf743e0acf080989a77ff6a.png
相关 Java反射-反射 API 转自:https://www.jianshu.com/p/e55770dd48d3 涉及这些类 ![watermark_type_ZmFuZ3poZW5naGVpdGk_s 深碍√TFBOYSˉ_/ 2023年01月17日 07:40/ 0 赞/ 175 阅读
相关 反射_反射概述 反射 JAVA反射机制是在运行状态中,对于任意一个 类,都能够知道这个类的所有属性和方法;对 于任意一个对象,都能够调用它的任意一个方 清疚/ 2022年06月17日 02:22/ 0 赞/ 229 阅读
相关 反射 1.类的加载概述和加载时机 1.1类的加载概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类 约定不等于承诺〃/ 2022年06月15日 01:47/ 0 赞/ 162 阅读
相关 反射 在反射中如果不使用强制获取私有的方法,无论是再获取成员变量还是方法的时候获取被public修饰的 反射首先获取构造,在获取构造之后才可以获取成员的方法 在java的反射机制 拼搏现实的明天。/ 2022年04月24日 10:00/ 0 赞/ 164 阅读
相关 反射 知识点: 1. 类对象概念 2. Class类的使用:创建类对象 3. 动态加载类 4. 获取方法信息 5. 获取成员变量、构造函数信息 6. 方法反射的基本操作 比眉伴天荒/ 2022年04月14日 04:14/ 0 赞/ 178 阅读
相关 反射 // 1.定义一个标准的JavaBean,名叫Person,包含属性name、age。 // 使用反射的方式创建一个实例、调用构造函数初始化name、age,使用反射方式调 Dear 丶/ 2022年04月03日 08:16/ 0 赞/ 193 阅读
相关 反射 反射 类加载器的概述 当程序要使用某个类时,如果该类还未被加载到内存中, 则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。 加载 就是指将c 怼烎@/ 2022年01月17日 12:13/ 0 赞/ 215 阅读
相关 【反射】 JAVA 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法 比眉伴天荒/ 2021年11月09日 20:40/ 0 赞/ 471 阅读
相关 反射 反射机制简述 静态编译:在编译时确定类型,绑定对象,即通过。 动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,有以降低类之间的 小咪咪/ 2021年09月27日 14:00/ 0 赞/ 356 阅读
相关 反射 目录 1 ClassLoader 类装载器 -------------------- 类装载器的工作机制 类装载器就是寻找字节码文件并且构造出类在JVM内部表 雨点打透心脏的1/2处/ 2021年09月27日 08:42/ 0 赞/ 286 阅读
还没有评论,来说两句吧...