反射机制

Java反射机制简单了解_Reflection

[亡魂溺海] 提交于 2019-12-05 10:11:45
反射机制: 反射(Reflection)能够让运行于JVM中的程序检测和修改运行时的行为。”这个概念常常会和内省(Introspection)混淆,以下是这两个术语在Wikipedia中的解释: 内省用于在运行时检测某个对象的类型和其包含的属性; 反射用于在运行时检测和修改某个对象的结构及其行为。 从它们的定义可以看出,内省是反射的一个子集。有些语言支持内省,但并不支持反射,如C++。 下面看反射的例子: Person.java package reflect; /** * Created with IntelliJ IDEA. * User: ASUS * Date: 14-7-10 * Time: 下午2:10 * To change this template use File | Settings | File Templates. */ public class Person { public static final int MAX_LENGTH = 10; public static final String BELONG = "MY"; public int age; public String name; public String address; public Person() { } public Person(int age, String name) {

Java的反射机制

偶尔善良 提交于 2019-12-05 07:38:40
Java 的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助。 那么什么是Java的反射呢? 大家都知道,要让Java程序能够运行,那么就得让Java类要被Java虚拟机加载。Java类如果不被Java虚拟机加载,是不能正常运行的。现在我们运行的所有的程序都是在编译期的时候就已经知道了你所需要的那个类的已经被加载了。 Java 的反射机制是在编译并不确定是哪个类被加载了,而是在程序运行的时候才加载、探知、自审。使用在编译期并不知道的类。这样的特点就是反射。 那么Java反射有什么作用呢? 假如我们有两个程序员,一个程序员在写程序的时候,需要使用第二个程序员所写的类,但第二个程序员并没完成他所写的类。那么第一个程序员的代码能否通过编译呢?这是不能通过编译的。利用Java反射的机制,就可以让第一个程序员在没有得到第二个程序员所写的类的时候,来完成自身代码的编译。 Java 的反射机制它知道类的基本结构,这种对 Java 类结构探知的能力,我们称为 Java 类的“自审” 。大家都用过Jcreator和eclipse。当我们构建出一个对象的时候,去调用该对象的方法和属性的时候。一按点,编译工具就会自动的把该对象能够使用的所有的方法和属性全部都列出来,供用户进行选择。这就是利用了Java反射的原理

在软件开发中利用反射机制来减少包依赖

家住魔仙堡 提交于 2019-12-05 06:11:42
MD2File 是我以前写的一个开源软件,主要功能是“将markdown语法的文档内容,导出为word,pdf,HTML等的文件;也支持markdown转HTML文本”。 其中,导出为word文档,需要依赖 POI ,导出pdf需要依赖 iText 。其中,iText支持4.x版本和5.x版本。这里就涉及到一个问题,我还是举例子说明下。 如果用户只需要一个功能,导出word文档功能。那用户总不能为了这个功能,而引入一个无关的iText包吧。反之也是,用户要导出PDF功能,却需要引入POI包。 但是,一开始我的代码还真是这样,如果不引入,会导致ClassNotFound异常,致使编译不通过,无法使用。 设计上,我是通过一个工厂类,然后根据需要的文件名后缀,来生产不同的文档Builder。代码一开始是这么写的。 public class BuilderFactory{ public static Decorator build(String ext) { DecoratorBuilder decoratorBuilder; if(ext.equalsIgnoreCase("docx")){ decoratorBuilder = new DocxDecoratorBuilder(); }else if(ext.equalsIgnoreCase("doc")){

从Oop-Klass模型看透反射

≡放荡痞女 提交于 2019-12-05 05:07:59
  《红楼梦》第十二回,贾瑞因痴迷王熙凤,被王熙凤折腾的眼看就快不行了。当然这里面是没有多少爱的,完全因王熙凤的美貌而起。就在这时来了一个跛足道人,带来了一面宝镜,说能治好贾瑞的病。当然这可不是一面普通的镜子,而是由警幻仙子做制。并且道人还告诫贾瑞,这面镜子专治邪思妄动之症,有济世保生之功。所以带他到世上,单与那些聪明俊杰,风雅王孙等看照。千万不可照正面,只照他的背面。   贾瑞先是依着跛足道人的话,照的背面。可是却看到一个骷髅立在里面,把贾瑞吓了个半死。这时贾瑞以为道士骗他,赶忙照了正面,这下看到了美貌的王熙凤,贾瑞满意极了。可是他的命却没有了。   正面的那个骷髅,正是病入膏肓的贾瑞自己,可是他却不敢相信那就是他自己现在的形象。他宁愿相信假的,也不愿相信真的。跛足道人明明叫贾瑞照背面,可是贾瑞却偏偏喜欢照正面。那是因为正面有贾瑞喜欢的东西。这时,再高明的医生也救不了他了。可想曹雪芹写到这里,虽说用的是风趣幽默的语言,从中却能看出他的无奈。   每天清晨傍晚,当我们站在镜子时前可曾想过,摘掉喜好的有色眼镜打开自己的心肺肠肝,镜中是否还是自己当初想要的样子。   以铜为镜正衣冠、以史为镜知兴替、以人为镜明得失。人类需要镜子去看清自己、看清时间、看清取舍,同样的是 类也需要。   JAVA是人造语言,其中的很多机制和抽象的出现都是源于人类社会的运作方式和道理

反射

女生的网名这么多〃 提交于 2019-12-05 04:57:40
反射 1.含义:   Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。 2.反射的优点:   反射提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力 3.反射的缺点:   炫耀通过动态的接入方法或者字段,这样会比直接的操作相对慢一些,所以会造成性能上偏慢的问题。 4.反射的三大作用:   4.1.动态获取类对象的三种方式:      1.Class.forName("全路径名"); ->使用情况: jdbc/自定义mvc框架调用     2.类名.class -> 使用情况:结合泛型做通用分页查询方法会用     3.类java.lang.Class(实例的类)实例(Student.class)的类实例getClass()获取 ->使用情况:通用的增删改结合泛型使用   4.2通过反射对对象实例化      一般情况:使用关键字(new)进行实例化      反射:通过调用java.lang.reflect.construct中的 newInstance() 方法来实例化对象   4.3动态调用方法(Method),属性(Filed),构造器( Constructor)        public static

.net core 反射的介绍与使用

徘徊边缘 提交于 2019-12-05 03:46:53
原文: .net core 反射的介绍与使用 1. 概述反射 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象。 反射机制允许程序在执行过程中动态地添加各种功能。 2. Type类的介绍 是BCL(基底类别库)声明的一个抽象类,所有它不能被实例化 对于程序中用到的每一个类型,CLR(公共语言运行时)都会创建一个包含这个类型信息的Type类型的对象 程序中用到的每一个类型都会关联到独立的Type类型的对象 不管创建的类型有多少个实例,只有一个Type对象会关联到所有这些实例 2.1 Type类的部分常见成员 成员 成员类型 描述 Name 属性 返回类型的名字 FullName 属性 返回数据类型的完全限定名(包括命名空间名) NameSpace 属性 返回包含数据类型声明的命名空间 Assembly 属性 返回声明类型的程序集。如果类型是泛型的,返回定义这个类型的程序集 GetConstructor(), GetConstructors() 方法 返回ConstructorInfo类型,用于取得该类的构造函数的信息 GetEvent(), GetEvents() 方法 返回EventInfo类型,用于取得该类的事件的信息 GetField(), GetFields() 方法 返回FieldInfo类型,用于取得该类的字段(成员变量)的信息

反射

泪湿孤枕 提交于 2019-12-05 03:10:40
反射:框架设计的灵魂   框架:半成品软件。可以在框架的基础上进行软件开发,简化代码   反射:将类的各个组成部分封装为其他对象,即反射机制;     好处:在程序运行过程中可以操作这些对象         可以降低程序的耦合性,提高程序的可扩展性 获取class对象的方式: 1class.forname("全类名"):将字节码文件加载进内存,返回class对象 多用于配置we年,将类名定义在配置文件中,读取文件,加载类 2通过类名的class属性来获取 多用于参数传递 3对象.getClass()方法,在object类中获取; 多用于对象的获取字节码文件; 结论:同一个字节码文件(*。class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个; 来源: https://www.cnblogs.com/Damocless/p/11901431.html

.net core 反射的介绍与使用

你。 提交于 2019-12-05 03:03:29
1. 概述反射 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象。 反射机制允许程序在执行过程中动态地添加各种功能。 2. Type类的介绍 是BCL(基底类别库)声明的一个抽象类,所有它不能被实例化 对于程序中用到的每一个类型,CLR(公共语言运行时)都会创建一个包含这个类型信息的Type类型的对象 程序中用到的每一个类型都会关联到独立的Type类型的对象 不管创建的类型有多少个实例,只有一个Type对象会关联到所有这些实例 2.1 Type类的部分常见成员 成员 成员类型 描述 Name 属性 返回类型的名字 FullName 属性 返回数据类型的完全限定名(包括命名空间名) NameSpace 属性 返回包含数据类型声明的命名空间 Assembly 属性 返回声明类型的程序集。如果类型是泛型的,返回定义这个类型的程序集 GetConstructor(), GetConstructors() 方法 返回ConstructorInfo类型,用于取得该类的构造函数的信息 GetEvent(), GetEvents() 方法 返回EventInfo类型,用于取得该类的事件的信息 GetField(), GetFields() 方法 返回FieldInfo类型,用于取得该类的字段(成员变量)的信息 GetInterface(),

Golang之反射reflect包

…衆ロ難τιáo~ 提交于 2019-12-05 01:02:59
反射规则 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 每个语言的反射模型都不同(同时许多语言根本不支持反射)。 Go语言实现了反射,所谓反射就是动态运行时的状态。 我们用到的包是reflect。 从接口值到反射对象的反射 反射仅是一种用来检测存储在接口变量内部(值value,实例类型concret type)pair对的一种机制。 在reflect反射包中有两种类型让我们可以访问接口变量内容 reflect.ValueOf() // ValueOf returns a new Value initialized to the concrete value // stored in the interface i. ValueOf(nil) returns the zero Value. func ValueOf(i interface {}) Value {...} reflect.TypeOf() // TypeOf returns the reflection Type that represents the dynamic type of i. // If

golang reflect 反射机制

ε祈祈猫儿з 提交于 2019-12-05 00:57:25
反射 The Laws of Reflection The Laws of Reflection Go Data Structures: Interfaces 介绍 在这篇文章中我们将讲解golang的reflect是如何工作的,每一门语言的反射模型都不同,并且语多语言也不支持 Types and interface 由于reflect是在类型(type)系统上建立的,所以我们先从类型开始复习. Go是一个静态语言,每一个变量都有一个静态类型, 如 int, float32, *MyType, []byte等,如果我们声名如下的代码 type MyInt int var i int var j MyInt 则i的类型为int, j的类型为MyInt. 虽然变量i和j的底层类型都是int, 但变量i和j的类型是有明显的区别的, 它们彼此不能直接进行赋值,必须通过转换. 非常重要的一个类型种类为interface类型,它表示固定的方法集。一个interface变量可以存放作何具体的值, 只要它实现了了interface包含的方法. 众所周知的一个例子是io package的 io.Reader和io.Writer // Reader is the interface that wraps the basic Read method. type Reader interface {