反射机制

Java的反射机制

天大地大妈咪最大 提交于 2020-01-31 04:46:32
1. 记录Java反射机制几篇写得不错的博客 Java高级特性——反射 【Android】 认识反射机制(Reflection) Java中的反射机制(一) 一个例子让你了解Java反射机制 【原】Java反射机制的原理及在Android下的简单应用 Java中的反射机制 java.lang.reflect.Method 2. 什么是反射? 在Java 运行时 环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? 答案是 肯定 的。 这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言的 反射(Reflection)机制 。 3. 反射机制主要提供的功能 (1)在运行时判断任意一个对象所属的类。 (2).在运行时构造任意一个类的对象。 (3).在运行时判断任意一个类所具有的成员变量和方法。 (4).在运行时调用任意一个对象的方法。 3. 示例 被反射的类 public class Book{ private final static String TAG = "BookTag"; private String name; private String author; @Override public String toString() { return "Book{" + "name='" + name + '\'' +

JAVA常用特性:反射机制

安稳与你 提交于 2020-01-31 00:52:01
反射: 反射的本质就是 通过一段字符串得到一个类的字节码文件 ,随后可以进行属性,方法等的操作。需要依赖 Class工具类 , 反射可以用来解耦合; 反射可以用来进行功能的拓展。 配置文件的读取: 1.通过类加载器 2.通过创建文件夹的方式 ................. ? 129.如何获取一个类的字节码对象 得到字节码对象clazz的方式有三种: 1).对象名.getClass() 2).类名.class 3).Class.forName(String 全类名):包名+类名( 借助Class工具类,反射的基础 ) 130.使用三种方式获 得同一个类字节码对象,是否是同一个对象 是的,因为一个类的Class对象只有一个 131.如何使用字节码对象创建对象 Object o = clazz .newInstance(),字节码对象clazz可以直接使用 newInstance()方法 来创建对象,但前提是该类中存在无参构造方法。 创建对象的另外一种方式是:先使用字节码对象获取构造方法,再利用构造方法调用newInstance(参数列表)方法创建对象。 132.如何使用字节码对象获取公共访问权限的构造方法的数组 Constructor<?>[] c1 = clazz .getConstructors(),使用字节码对象clazz调用getConstructors()方法

java反射

隐身守侯 提交于 2020-01-31 00:36:39
反射 反射机制-在运行状态下,对于任意一个类,我们都能够得到这个类的所有方法和属性信息;对于任意一个对象,也可以去调用其属性和方法(class对象在java应用程序中代表一个类或者一个接口) 反射机制获取的信息:Field Constructor Method 获取class对象 Class cla = Student.class;(创建Student类) 一:获取构造函数 getDeclaredConstructors() 获取全部的构造函数 Constructor[] constructors = cla.getDeclaredConstructors(); for(Constructor c:constructors){ System.out.println©; } getConstructors() 获取public的构造函数 Constructor[] constructors1 = cla.getConstructors(); for(Constructor c:constructors1){ System.out.println©; } getDecalaredConstructor(Class…parametertype) Constructor constructor = cla.getDeclaredConstructor(String.class,int

java反射机制

心已入冬 提交于 2020-01-29 13:28:47
反射在java中占据很重要的地位,spring的IOC/DI背后依靠的就是java的反射机制。不仅spring使用反射机制,Hibernate的ORM框架也是反射机制实现的,AOP动态代理也大量使用了反射技术,在不知不觉中,java的反射机制其实已经被大量应用在我们的程序中。 java反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性方法;对于任意一个对象都能调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能成为java的反射机制。 反射的优点就是动态灵活,一切都是在运行时期根据具体情况(配置)决定创建哪种对象、调用哪个方法等。这种灵活性可以方便我们设计解耦,这也是Spring做得最好的事情之一,所以我们可以很方便的替换某些class文件而不需要重新编译相关类。事物都是两面的,反射当然也有缺点,对于编译期能确定的事情,编译器可以或多或少做些优化,而运行期就像解释执行一样,编译器一般没法进行优化,所以使用反射性能要打点折扣;另外反射破坏类的封装性,通过反射我们可以访问类的任何成员,包括private成员,这违反了面向对象设计原则。 java.lang.Class类:反射中最常出现的类,它跟其它JAVA类没什么两样只是名字恰巧叫Class,都是继承于Object类,其实它就是JAVA类的抽象,用来描述类的元数据,比如每个类都有类名、装载器、哈希等

Java-反射机制

佐手、 提交于 2020-01-29 09:09:19
什么是反射机制   简单的说,反射技术就是 动态的获取指定的类以及动态的调用类的内容。可以提高扩展性 反射机制提供的功能。java.lang.reflect 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判段任意一个类所具有的成员变量和方法 在运行时调用任一个对象的方法 在运行时创建新类对象 获取类的Class对象 在使用Java的反射功能时,基本首先都要获取类的Class对象,再通过Class对象获取其他的对象 调用getClass Boolean var1 = true; Class<?> classType2 = var1.getClass(); 运用.class 语法 Class<?> classType4 = Boolean.class; System.out.println(classType4); 运用static method Class.forName() Class<?> classType5 = Class.forName("java.lang.Boolean"); System.out.println(classType5); 运用primitive wrapper classes的TYPE 语法 Class<?> classType3 = Boolean.TYPE; System.out.println(classType3);

Java 设计模式(一)反射

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-29 07:39:48
1. 概述 反射:将类的各个组成部分封装为其他对象,可以在程序运行过程中操作这些对象,还可以解耦,提高程序的可扩展性。Java反射技术应用广泛,它能配置类的全限定名、方法和参数,完成对象的初始化,甚至反射某些方法。 2.获取Class对象的方式 *  Class.forName(“全限定名”) ;将字节码文件加载进内存,返回Class对象。多用于配置文件,将类名定义在配置文件中。读取文件,加载类 *  类名.class :通过类名的属性class获取。多用于参数传递 *  对象.getClass() :getClass()在Object类中定义着的。多用于对象获取字节码格式 代码演示: package com . wanfei . domain ; /** * 创建一个Student类: */ public class Student { private String name ; private int age ; public String getName ( ) { return name ; } public void setName ( String name ) { this . name = name ; } public int getAge ( ) { return age ; } public void setAge ( int age ) { this .

深入浅出 .NET C# 反射技术

。_饼干妹妹 提交于 2020-01-29 00:22:02
反射这个词听起来就很牛逼是吧? 嗯的确,反射是比较高级的特性,只有语言基础很扎实的Dev们才应该使用它。 搞点反射,可以 提高程序的灵活性、可扩展性、 耦合度。 反射这东西,是为了动态地运行时加载,相比于静态代码。编译的时候就是板上钉钉了。 就是说,如果你的程序需要在运行时搞一些晚绑定,动态加载或检查对象之类的操作时,那么反射欢迎你。 说到这,也许有人立刻就去找反射相关的文档和教程,想赶紧把反射技术实践到程序上。 给爷爪巴 使用反射是要分场合的 反射基本上是一种解释操作,用于字段啊方法啊接入时要远慢于直接撸代码。 因此反射机制主要应用在对灵活性和拓展性要求很高的东西上,普通程序不建议使用。 还有一件事,如果你程序全用的反射。一时反射一时爽,后期维护秒跑路。 程序员最烦的2件事是什么,维护没有注释的代码和写注释。但当程序员看到代码有一大堆的反射而且没写注释的时候,他们会直接/kill @p就完事了。 因为 反 射 绕 过 了 源 代 码 的 技 术 , 反射代码贼JB复杂,相比普通的来说 BCL声明了一个Type类型(它是抽象类),用来包含类型的特性。使用这个类的对象能让我们获取程序使用的类型的信息。 由于Type是抽象类,所以它不能被实例化。而是在运行时,CLR创建从Type(RuntimeType)派生的类型的实例。当我们要访问这些实例的时候

java反射

╄→尐↘猪︶ㄣ 提交于 2020-01-28 20:46:06
反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一、反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象. 以上的总结就是什么是反射 反射就是把java类中的各种成分映射成一个个的Java对象 例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。 (其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述) 如图是类的正常加载过程:反射的原理在与class对象。 熟悉一下加载的时候:Class对象的由来是将class文件读入内存,并为之创建一个Class对象。 其中这个Class对象很特殊。我们先了解一下这个Class类 二、查看Class类在java中的api详解(1.7的API) 如何阅读java中的api详见java基础之——String字符串处理 Class 类的实例表示正在运行的 Java 应用程序中的类和接口

Java反射机制

冷暖自知 提交于 2020-01-28 03:02:54
一、什么是反射机制 简单的来说, 反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息。 二、哪里用到反射机制 添加一句:所有类的对象其实都是 Class的实例。 有些时候,我们用过一些知识,但是并不知道它的专业术语是什么,在刚刚学jdbc时用过一行代码, Class.forName("com.mysql.jdbc.Driver.class").newInstance();但是那时候只知道那行代码是生成 驱动对象实例,并不知道它的具体含义。听了反射机制这节课后,才知道,原来这就是反射,现在很多开 框架都用到反射机制, hibernate、struts都是用反射机制实现的。 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类; 在运行时构造任意一个类的对象; 在运行时判断任意一个类所具有的成员变量和方法; 在运行时调用任意一个对象的方法;生成动态代理。 三、反射机制的优点与缺点 为什么要用反射机制?直接创建对象不就可以了吗,这就涉及到了 动态与静态的概念, 静态编译:在编译时确定类型,绑定对象,即通过。 动态编译: 运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多 态的应用,有以 降低类之间的藕合性。 一句话,反射机制的优点就是可以实现动态创建对象和编译

反射机制

狂风中的少年 提交于 2020-01-27 22:14:59
概述   Java的反射机制是指程序在运行时动态获取信息以及动态调用对象方法的功能。它是一种强有力的工具,是面向抽象编程一种实现方式,它能使代码语句更加灵活,极大提高代码的运行时装配能力。   使用反射机制的意义在于:   1.反射机制极大的提高了程序的灵活性和扩展性,降低模块的耦合性,提高自身的适应能力。    2.通过反射机制可以让程序创建和控制任何类的对象,无需提前硬编码目标类。    3.使用反射机制能够在运行时构造一个类的对象,判断一个类所具有的成员变量和方法,调用一个对象的方法并生成动态代理。    4.反射机制是构建框架技术的基础所在,使用反射可以避免将代码写死在框架中。 Class类   java.lang.Class类提供了一些方法可以获取类型的信息,包括成员变量和方法等。无论是基本类型,还是引用类型,每一种类型都有一个对应的Class对象。   获取Class对象的方式有3种:   1.调用Object的getClass()方法获取Class对象。     a.该方式不适于基本类型。     b.该方式获取的Class对象的泛型类型无法确定,只能限制其范围为对象的类型或其子类类型。   2.用“.class”获取Class对象。     a.该方式适用于所有类型。     b.该方式获取的Class对象的泛型类型可以确定。   3.调用Class.forName