反射机制

.NET技术----反射

前提是你 提交于 2020-03-20 06:43:57
1、什么是反射 反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等,。 System.reflection命名空间包含的几个类,允许你反射(解析)这些元数据表的代码 和反射相关的命名空间(我们就是通过这几个命名空间访问反射信息): System.Reflection.MemberInfo System.Reflection.EventInfo System.Reflection.FieldInfo System.Reflection.MethodBase System.Reflection.ConstructorInfo System.Reflection.MethodInfo System.Reflection.PropertyInfo System.Type System.Reflection.Assembly Reflection,中文翻译为反射。反射是种机制,可以获得一些元数据,可以检查当时正在运行的其他代码,还可以得到一些类的信息。 反射命名空间(System.Reflection)中的类以及 System.Type,您可以获取有关已加载的程序集和在其中定义的类型(如Class、Infterface和值类型等)的信息

程序集与反射技术(C#)

梦想与她 提交于 2020-03-20 06:36:52
首先我们来看 程序集 ,程序集是代码进行编译是的一个逻辑单元,把相关的代码和类型进行组合,然后生成PE文件(例如可执行文件.exe和类库文件.dll)。由于程序集在编译后并不一定会生成单个文件,而可能会生成多个物理文件,甚至可能会生成分布在不同位置的多个物理文件,所以程序集是一个逻辑单元,而不是一个物理单元。即程序集在逻辑上是一个编译单元,但在物理储存上可以有多种存在形式。对于静态程序集可以生成单个或多个文件,而动态程序集是存在于内存中的。 在C#中程序集处处可见,因为任何基于.NET的代码在编译时都至少存在一个程序集(所有.NET项目都会默认引用 mscorlib程序集 )。 基于 .NET框架 的.dll库是一个完整的程序集,需要事先引用对应的类库。从代码的结构上看,一个程序集可以包含一个或多个命名空间,而每个命名空间中又可以包含子命名空间或类型列表。由于程序集在编译后可以生成多个模块文件,因此一个物理文件并不代表它就是一个程序集,一个程序集并不一定只有一个文件。不过,在VS开发环境中,一个解决方案可以包含多个项目,而每个项目就是一个程序集。 程序集信息其实是通过在程序集上应用各种Attribute来设置的,并且这些特性都位于System.Reflection命名空间,也就是这一系列Attribute提供给反射技术,可用于获取程序集的基本信息. 应用程序结构分为应用程序域

Java的学习 | 反射

依然范特西╮ 提交于 2020-03-17 18:22:50
文章目录 什么是反射? Java反射机制提供的功能 反射相关的主要API Class类 理解Class类 获取 Class的实例 的方式(前三种方式需要掌握) 什么是反射? Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于 Reflection API 取得任何类的内部消息,并能直接操作任意对象的内部属性及方法。 正常方式:引入需要的“包类”名称 → 通过new实例化 → 取得实例化对象 反射方式:实例化对象 → getClass() 方法 → 得到完整的“包类”名称 Java反射机制提供的功能 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时获取泛型消息 在运行时调用任意一个对象的成员变量和方法 在运行时处理注解 生成动态代理 反射相关的主要API java.lang.Class : 代表一个类 java.lang.reflect.Method : 代表类的方法 java.lang.reflect.Field : 代表类的成员变量 java.lang.reflect.Constructor : 代表类的构造器 . . . . . . Class类 理解Class类 关于 java.lang.Class类 的理解 类的加载过程: 程序经过 javac.exe 命令以后

注解与反射

蓝咒 提交于 2020-03-17 01:13:58
注解与反射 文章目录 注解与反射 一、内置注解 二、元注解 三、自定义注解 四、Java反射机制 4.1静态语言与动态语言 4.2反射(Reflection) 4.3 反射机制的应用 4.4 反射的优点与缺点 4.5 反射相关的API 五、Class类 5.1概要 5.2 获得Class对象的途径 5.3 Class类的常用方法 六、类的加载与ClassLoader 6.1 Java内存分析 6.2 类的加载与ClassLoader的理解 6.3 什么时候会发生类的初始化 6.4 类加载器的作用 七、创建运行时类的对象 八、获取运行时类的完整结构 九、调用运行时类的指定的结构 十、性能对比分析 十一、反射获取注解信息 一、内置注解 内置注解(了解即可): @ Override 用在方法上,表示这个方法重写了父类的方法,如toString() @Deprecated 表示这个方法已经过期,不建议开发者使用 @SuppressWarnings 注解的用处是忽略警告信息 @SuppressWarnings (“all”) @FunctionalInterface 用于约定函数式接口 函数式接口概念: 如果接口中只有一个抽象方法(可以包含多个默认方法或多个static方法),该接口称为函数式接口。函数式接口其存在的意义,主要是配合Lambda 表达式 来使用。 二、元注解 元注解

C#反射

大兔子大兔子 提交于 2020-03-16 15:17:43
反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。 程序代码在编译后生成可执行的应用,我们首先要了解这种可执行应用程序的结构。 应用程序结构分为应用程序域—程序集—模块—类型—成员几个层次,公共语言运行库加载器管理应用程序域,这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。 程序集包含模块,而模块包含类型,类型又包含成员,反射则提供了封装程序集、模块和类型的对象。我们可以使用反射动态地创建类型的实例,将类型绑定到现有对象或从现有对象中获取类型,然后调用类型的方法或访问其字段和属性。反射通常具有以下用途。 (1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。 (2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。 (3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private

提高java反射速度的方法method.setAccessible(true)

我是研究僧i 提交于 2020-03-16 13:51:26
转至:http://huoyanyanyi10.iteye.com/blog/1317614 1.import java.lang.reflect.InvocationTargetException; 2.import java.lang.reflect.Method; 3. 4.public class Main { 5. public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { 6. Method m = A.class .getDeclaredMethod( "getName" , new Class[]{}); 7. System.out.println(m.isAccessible()); 8. //getName是public的,猜猜输出是true还是false 9. 10. A a = new A(); 11. a.setName("Mr Lee" ); 12. long start = System.currentTimeMillis(); 13. for ( int i= 0 ;i<

深入解析Java反射

梦想与她 提交于 2020-03-16 11:46:35
因为本人最近正筹备 Samsara 框架的开发,而其中的IOC部分非常依靠反射,因此趁这个机会来总结一下关于Java反射的一些知识。本篇为基本篇,基于JDK 1.8。 一、回顾:什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。 Oracle官方对反射的解释是 Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterparts, within security restrictions. The API accommodates applications that need access to either the public members of a target object (based on its runtime class) or the members declared by a given class.

反射笔记

江枫思渺然 提交于 2020-03-16 11:11:29
目录 类的生命周期: 类的主动使用被动使用和类的初始化时机: 反射的使用: Class.forName()读取配置文件举例 通过反射获取构造方法并使用 通过反射获取成员变量并使用 通过反射获取方法并使用 通过反射越过泛型检查 通过反射写一个通用的方法,设置某个对象的某个属性为指定的值 小练习: 动态代理的概述和实现 关于反射的更详细讲解可以看这位博主 https://blog.csdn.net/sinat_38259539/article/details/71799078 类的生命周期: 在一个类编译完成之后,下一步就需要开始使用类,如果要使用一个类,肯定离不开JVM。在程序执行中JVM通过加载,链连接,初始化这3个步骤完成。 类加载器工作机制: 类的加载是通过类加载器完成的,加载器将.class文件的二进制文件装入JVM的方法区,并且在堆区创建描述这个类的java.lang.Class对象。用来封装数据。 但是同一个类只会被类加载器加载一次 1:加载:指将类的class文件读入内存,并为之创建一个java.lang.Class对象,即当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象。 2:连接就是把二进制数据组装为可以运行的状态。 连接分为验证,准备,解析这3个阶段 验证:一般用来确认此二进制文件是否适合当前的JVM(版本)

反射

≯℡__Kan透↙ 提交于 2020-03-16 11:10:08
java反射(特别通俗易懂) 2018年05月02日 11:08:15 java知识社 阅读数:18739 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一、反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象. 以上的总结就是什么是反射 反射就是把java类中的各种成分映射成一个个的Java对象 例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。 (其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述) 如图是类的正常加载过程:反射的原理在与class对象。 熟悉一下加载的时候:Class对象的由来是将class文件读入内存,并为之创建一个Class对象。 其中这个Class对象很特殊。我们先了解一下这个Class类 二、查看Class类在java中的api详解(1.7的API)

java 的反射机制

谁都会走 提交于 2020-03-15 11:55:00
绪论 首先,什么是反射机制?   它是一种 “运行时检视类型信息”、“修改属性”、“调用方法”的一种机制, 其次,常用的运用场景有哪些? 运行时实例化类的对象。(例如:实例化一个 User 类,此 User 类的名字容器事先是不知道的) 运行时调用方法。(例如:调用 User 对象的 a 方法) 运行时修改属性值。(例如:修改 User 对象的 name 属性) 最后,温馨提示   JDK 中关于反射的相关类型都在 “java.lang.reflect” 包下,并不需要额外的第三方包来完成反射。 第一章:获取 Class对象 1、啥是 Class对象?   在 java 中,用来表示 运行时类型信息的对应类 就是 Class 类,而由此 Class 类创建出来的实例就是传说中的 “Class 对象”。 2、咋获取 Class 对象?   有三种方法,咱细品:    第一种方法:Class.forName("类的全称")      此方法适合,只知道类的字符表示(人话:类的全称)的情况 。若类还没加载此类,则加载;若类已经加载了此类,则返回已加载的类的 “Class 对象” 给你。 //like this1 Class user = Class.forName("com.User");    第二种方法:类的 Class字段      此方法适合,容器事先就知道该类的情况 。 1 /