反射机制

Java基础之反射

孤街醉人 提交于 2019-12-22 14:36:54
反射简介:    Java Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法   Java反射机制提供的功能   在运行时判断任意一个对象所属的类   在运行时构造任意一个类的对象   在运行时判断任意一个类所具有的成员变量和方法   在运行时调用任意一个对象的成员变量和方法   生成动态代理   主要API:    java.lang.Class:代表一个类   java.lang.reflect.Method:代表类的方法   java.lang.reflect.Field:代表类的成员变量   java.lang.reflect.Constructor:代表类的构造方法 一、Class类    对照镜子后可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。一个 Class 对象包含了特定某个类的有关信息。   Class本身也是一个类   Class 对象只能由系统建立对象    一个类在 JVM 中只会有一个Class实例    一个Class对象对应的是一个加载到JVM中的一个.class文件   每个类的实例都会记得自己是由哪个 Class 实例所生成  

Java高级-反射机制

喜欢而已 提交于 2019-12-21 23:59:02
Java-Reflect专题 1. Class类的使用 2. 方法的反射 3. 成员变量的反射 4. 构造函数的反射 5. Java类加载机制 Class类 1. 在面向对象的世界里,万事万物皆对象。   Java语言中,静态的成员、普通数据类型类是不是对象呢?   类是谁的对象呢?   类是对象,类是java.lang.Class类的实例对象(There is a class named Class) public class Main { public static void main(String[] args) { //Foo的实例对象如何表示 Foo fool = new Foo(); //Foo这个类 也是一个实例对象,Class类的实例对象,如何表示呢 //任何一个类都是Class的实例对象,这个实例对象有三种表示方式 //第一种表示方式--->实际在告诉我们任何一个类都有一个隐含的静态成员变量class Class c1 = Foo.class; //第二种表示方式 已经知道该类的对象通过getClass方法 Class c2 = fool.getClass(); /* * 官网c1,c2表示了Foo类的类类型(class type) * 万事万物皆对象, * 类也是对象,是Class类的实例对象 * 这个对象我们称为该类的类类型 */ //不管c1 or

Java反射机制专题

最后都变了- 提交于 2019-12-21 04:37:38
·Java Reflection Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法 ·Java反射机制提供的功能   在运行时判断任意一个对象所属的类   在运行时构造任意一个类的对象   在运行时判断任意一个类所具有的成员变量和方法   在运行时调用任何一个对象的成员变量和方法   生成动态代理 ·反射相关的主要API:   java.lang.Class:代表一个类   java.lang.reflect.Method:代表类的方法   java.lang.reflect.Field:代表类的成员变量   java.lang.reflect.Constructor:代表类的构造方法 Class类 在Object类中定义了以下的方法,此方法将被所有子类继承:   public final Class getClass() 以上的方法返回值的类型是一个Class类,此类事Java反射的源头,实际上所谓反射从程序的运行结果来看也很好理解,即:可以通过对象反射求出类的名称。 ·对照镜子后可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE都为其保留一个不变的Class类型的对象。一个Class对象包含了特定某个类的有关信息。

go--反射

佐手、 提交于 2019-12-21 04:15:20
变量的内在机制 go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息 值信息:程序运行过程中可动态变化的。 反射介绍 反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在编译器就将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改他们。 在go语言中,空接口可以存储任意类型的变量,要获取这个空接口保存的数据是什么,就要使用反射。 reflect包 任意接口值在反射中都可以理解为由 reflect.Type 和 reflect.Value 两部分组成,并且reflect包提供了 reflect.TypeOf 和 reflect.ValueOf 两个函数来获取任意对象的Value和Type。 TypeOf 在go语言中,使用 reflect.TypeOf() 函数可以获得任意值得类型对象(reflect.Type),程序通过类型对象可以访问任意值的类型信息。 func reflectType(x interface{}) { v := reflect.typeOf(x) fmt.Printf("type:%v\n", v) } func

反射 is 框架的灵魂

浪子不回头ぞ 提交于 2019-12-21 03:56:12
背景: 我不相信你会问—啥是框架? (简单理解为可复用的代码)像现在很流行的框架如 Spring , Spring boot,Spring AOC 等都是框架,组成它们的代码中总会见到反射机制。 简介: 反射: 将类的组成部分封装成一个对象。 用一张图解释哈: 过程解释: 还是一个老生常谈的问题,我们用高级语言编写的代码如何被计算机执行? 都知道计算机只能执行机器码。 所以我们编译高级语言代码最终也会生成机器码,只不过中间有一个过度的部分那就是字节码。利用 javac 生成字节码后,我们想执行这个程序。又知道计算机是从内存中读取指令和数据的,我们利用反射将字节码文件加载进内存,然后被计算机所执行。 使用反射的好处: 1 可以在程序运行中操纵这些对象 2 可以解耦,提高程序的可扩展性 =============================================================== 应用举例: 获取 Class 对象的方式(可以理解 Class 对象是反射的另一种体现): 1 Class . forName ( "全类名" ) // 将磁盘中的对应代码加载进内存,返回 Class 对象(**多用于配制文件) 2 类名 . class //通过类名的属性获取对象(内存中),(**多用于参数传递) 3 对象 . getclass ( ) // getclass

Java 反射

空扰寡人 提交于 2019-12-21 01:10:08
概述 定义 JAVA反射机制 是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 用途 在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法。当然,也不是所有的都适合反射,之前就遇到一个案例,通过反射得到的结果与预期不符。阅读源码发现,经过层层调用后在最终返回结果的地方对应用的权限进行了校验,对于没有权限的应用返回值是没有意义的缺省值,否则返回实际值起到保护用户的隐私目的。 反射机制的相关类 与Java反射相关的类如下: 类名 用途 Class类 代表类的实体,在运行的Java应用程序中表示类和接口 Field类 代表类的成员变量(成员变量也称为类的属性) Method类 代表类的方法 Constructor类 代表类的构造方法 Class类 Class 代表类的实体,在运行的Java应用程序中表示类和接口。在这个类中提供了很多有用的方法,这里对他们简单的分类介绍。 获得类相关的方法 方法 用途 asSubclass(Class<U> clazz) 把传递的类的对象转换成代表其子类的对象 Cast 把对象转换成代表类或是接口的对象

JavaSE-22 反射

穿精又带淫゛_ 提交于 2019-12-20 10:10:17
学习要点 反射概念 反射的应用 反射概述 1 反射机制 定义 Java反射机制是指在程序在运行状态中,动态获取信息以及动态调用对象方法的功能。 Java反射的动态性质:运行时生成对象实例、运行期间调用方法、运行时更改属性。 Java 程序执行过程 反射执行过程 1) Java反射机制是在编译时并不确定哪个类被加载了,而是在程序运行的时候才加载、探知、使用。 2) Java反射机制能够知道类的基本结构,这种对Java类结构的探知能力,称为Java类的“自审”。例如开发环境eclipse或者myeclipse中的代码自动提示功能,就是利用了Java的反射机制,对所创建对象的探知和自审。 3) 通过Java反射,可以实现以下功能: 在运行时判断任意一个对象所属的类。 在运行时构造任意一个类的对象。 在运行时判断任意一个类所具有的方法和属性。 在运行时调用任意一个对象的方法。 2 Java反射常用API ava 反射常用核心类位于java.lang.reflect 包,常用类: 1) Class类—可获取类和类的成员信息 2) Field类—可访问类的属性 3) Method类—可调用类的方法 4) Constructor类—可调用类的构造方法 使用反射的基本步骤 1) 导入java.lang.reflect.* 2) 获得需要操作的类的Java.lang.Class对象 3)

javase反射

笑着哭i 提交于 2019-12-20 08:25:11
反射 reflect 反射做为java的一种自省机制 Class 类 java万物皆对象 不算对象的有 :基本类型不算对象,但是有包装类.static不算对象 类也是对象 public class A,在这句话中A类也是一个对象,类是谁 的对象? 所有的类都是Class类的实例对象 A a = new A(); a是A类的对象 A类是Class类的对象,我们也称为Class是所有类的类类型 如何去描述Class,有三种方式,也称为得到类类型 1.类名.class静态属性 Class c = 类.class; 2.Class.forName("类的全路径 包名.类名") 这种方式也称为动态 加载,动态加载是指程序运行期发生的。默认的类加载行为是静态加载 静态加载:运行一个类之前需要编译类,在编译类的时候会把该类所 关联的其他类一并编译加载 动态加载:运行期发生,运行时把指定的类编译加载 构造方法私有化会导致无法在类的外部创建该类的实例 单例,单一实例 用反射得到父类的属性和方法,递归到Object类 反射得到实现的接口中的属性和方法 来源: https://www.cnblogs.com/beiluo712/p/10429095.html

Java第十二章反射机制

為{幸葍}努か 提交于 2019-12-18 14:07:43
Java Reflection Reflection(反射)是被视为 动态语言 的关键,反射机制允许程序在执行期借助于ReflectionAPO取得任何类的内部信息, 并能直接操作任意对象的内部属性及方法 Java反射机制提供的功能 》在运行时判断任意一个对象所属的类 》在运行时构造任意一个类的对象 》在运行时判断任意一个类所具有的成员变量和方法 》在运行时调用任意一个对象的成员变量和方法 》生成动态代理 主要内容:    1.理解Class类并实例化Class类对象    2.运行时创建类对象并获取类的完整结构    3.通过反射调用类的指定方法、指定属性    4.动态代理 反射相关的主要API: 》 java.lang.class:代表一个类 》java.lang.reflect.Method:代表类的方法 》java.lang.reflect.Field:代表类的成员变量 》java.lang.reflect.Construtor:代表类的构造方法 》。。。 1.理解Class类并实例化Class类对象 /* * java.lang.Class:是反射的源头 * * Class类 * * 我们创建了一个类,通过编译(javac.exe),生成对应的.class文件。之后我们使用java.exe加载(JVM的类加载器完成的)此.class文件, * 此

反射机制

你说的曾经没有我的故事 提交于 2019-12-18 11:22:19
概念: 指的是可以在运行时加载、探知、使用编译期间完全未知的类。程序在运行状态中,可以动态加载一个只有名称的类,对于任意一个已加载的类都可以知道该类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性。 加载类完成后,在堆内存中,产生一个class类型的对象(一个类只有一个class对象),该对象就包括完整的类的结构信息通过该对象看到类的结构该对象如同一面镜子,透过其可看到类的结构,因此成为反射。 解决的问题: 由于在传统的创建对象的方法中,需要预先知道要使用的类,若要修改使用的类必须修改源码,因此使用反射机制。 使用: 获取类对象、操作属性、方法、构造器 1.反射获取类对象的三种方式: Class.forName();//根据全限定路径获取 对象.getclass();//根据对象获取 类名.class();//根据类名获取 2. 反射创建类对象(实现java对象的动态创建): Class cls=Class.forName(“类的路径”); Object obj=cls.newInstance();//对创建的类对象进行实例化 缺点:代码效率低 Class cls=类名.class(); Class cls=new 类名.getclass(); 3 .反射操作元素属性: Class cls=Class.forName(" ");//获取类对象 Field[ ]