反射基本原理

反射的概念:
   在Java中的反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
    对于任意一个类,都能调用它的任意一个方法;
    这种动态获取信息以及动态调用对象的功能成为Java语言的反射机制。

我们写的类在载入内存的时候jvm虚拟机是怎么识别到底哪个是变量,哪个是方法,哪个是修饰符的呢?
          因为java中的Class也是一个对象,那么有对象就有对应的类,当在硬盘中的时候是一个文件,当载入内存的时候就可以看成一个对象。这个Class对象的成员变量就是        Field、Constructor、Method、Modifier,值就是变量名、修饰符、方法名。类里面的field、constructor、method、modifier,在java.lang.reflect中都有这些方法、变量等对应的类,其中有类Field、类Constructor、类Method、类Modifier,有对象就有对应的类。例如,我们写了一个动物类,成员变量有毛色、体重,毛色=红色、体重=70,毛色的值是红色,体重的值是70,这个很好理解。那么,在jvm虚拟机中,java.lang.Class就相当于这个动物类,成员变量就是Field、Constructor、Method、Modifier,值就是变量名、修饰符、方法名。因此我们就可以通过Class对象去获得成员变量的值,也就是我们想要得到的变量名、修饰符列表、方法名等等,这就是反射的基本原理。

Java反射机制能够实现的功能:
    1 在运行时判断任意一个对象所属的类
    2 在运行时构造任意一个类的对象
    3 在运行时判断任意一个类所具有的方法和属性
    4 在运行时调用任意一个对象的方法
    5 生成动态代理
在动态代理中应用的反射最多,可也说有动态代理必有反射。

获取Class类对象有三种方法,这个对象是java.lang.Class类的,
    1 使用Class类的forName()静态方法
      Class c1 = Class.forName("Employee");//"类的全路径"
    

    2 调用某个类的class属性来获取该类对应的Class对象
      每个类都默认具备Class属性,这个属性保存的是它对应那个Class对象的内存地址
      Class c2 = Employee.class;

    3 调用某个对象的getClass()方法
      java中任何一个对象都有getClass()方法,e是运行时类
      Employee e = new Employee();
      Class c3 = e.getClass();

Class类对象获取了之后,我们就可以通过对象获取想要得到的属性,方法,以及对属性的操作等等
这些方法就不一一列出来了,写出来没有什么意义,在Java手册中都有说明,多翻翻手册总是有用处的.

时间: 2024-08-25 05:31:36

反射基本原理的相关文章

9.反射的基本原理

1.反射的原理 * 应用在一些通用性比较高的代码中 * 例如后面学到的框架,大多数都是使用反射来实现的 * 在框架开发中,都是基于配置文件开发 在配置文件中配置了类,可以通过反射得到类中的所有内容,可以让类中的某些方法来执行 * 类中的所有内容:属性.没有参数的构造方法.有参数的构造方法.普通方法 * 画图分析反射的原理 * 首先需要把java文件保存到本地硬盘上 .java * 编译java文件,成.class文件 * 万事万物都是对象,class文件在内存中使用class类表示 * 当使用反

moon 反射机制---java.lang.reflect包

java反射机制:在运行状态中,对于一个已经加载到JVM的java对象/类 在程序中实现访问.检查.修改.描述java对象本身的信息(构造方法.方法.成员变量.类本身的信息) 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. C++,Java,C#不是动态语言.但是JAVA有着一个非常突出的动态相关机制:Reflection, 反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接. 二,反射机制的作用:

.NET基础拾遗(4)委托、事件、反射与特性

Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 一.委托基础 1.1 简述委托的基本原理 委托这个概念对C++程序员来说并不陌生,因为它和C++中的函数指针非常类似,很多码农也喜欢称委托为安全的函数指针.无论这一说法是否正确,委托的的确确实现了和函数指针类似的功能,那就是提供了程序回调指定方法的机制. 在委托内部,包含了一个指向某个方法的指针(这一点上委托实现机制和C++的函数指针一致),为何称其

.NET基础 (17)反射

反射1 请解释反射的基本原理和其实现的基石2 .NET提供了哪些类型来实现反射3 如何实现动态地发射程序集4 如何利用反射来实现工厂模式 反射1 请解释反射的基本原理和其实现的基石 反射是一种动态分析程序集.模块.类型.字段等目标对象的机制,它的实现依托于元数据.元数据是存储在PE文件中的数据块,它详细记录了程序集后模块内部的结构.引用类型.程序集和清单. 2 .NET提供了哪些类型来实现反射 在System.Reflection命名空间下,.NET提供了丰富的实现反射机制的类型,可以达到读取元

java反射的理解与应用(某大神博客中看到的博文,写的真的太好了,果断转载作为笔记)

原文地址:http://www.cnblogs.com/jqyp/archive/2012/03/29/2423112.html#undefined 一.什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息. 二.哪里用到反射机制 有些时候,我们用过一些知识,但是并不知道它的专业术语是什么,在刚刚学jdbc时用过一行代码, Class.forName("com.mysql.jdbc.Driver.cl

通过反射克隆对象,对象复制(克隆)工具类

最近做的项目中,经常会遇到用视图来操作数据库的,但是页面需要的则是某个实体对象,在controller层查出list<view> 还要把将view对象转化成entity对象.需要写一大堆的get和set方法,而且如果实体增删字段的话,还需要把转化代码再修改一下,让人头疼. 当我需要操作一个实体对象完成两件不同的事情,这2个方法中会修改实体对象中的属性,第一个方法调用后,再调用第二个方法时,会受影响.为了保证不受影响,必须copy一份属性值一模一样的实体.这时候就需要一个工具类来完成了. 本着磨

Java编程 的动态性,第 2部分: 引入反射--转载

在“ Java编程的动态性,第1部分,”我为您介绍了Java编程类和类装入.该篇文章介绍了一些Java二进制类格式的相关信息.这个月我将阐述使用Java反射API来在运行时接入和使用一些相同信息的基础.为了使已经熟知反射基础的开发人员关注本文,我将在文章中包括反射性能如何与直接接入相比较. 使用反射不同于常规的Java编程,其中它与 元数据--描述其它数据的数据协作.Java语言反射接入的特殊类型的原数据是JVM中类和对象的描述.反射使您能够运行时接入广泛的类信息.它甚至使您能够读写字段,调用运

Unity 3D 海水的实现2 折射与反射 离屏相机的渲染

版本:unity 5.4.1  语言:C# 在上节博文实现后,我添加了一些场景的元素,海水的效果大概是这个样子的: 接下来的目标是实现海水的折射和反射,书中使用的Unity应该是4.x时代的,Unity自带基础包是5.x的,然后我再在网上看了一个例子,看了下来基本原理都差不多. 还记得移动端简单阴影的实现吧,对,就是添加一个相机把照到的玩家传给Shader后,显示在地上,原理是一样的. 首先获取到玩家的相机,新建相机到玩家当前相机,经过一个反射矩阵的旋转后,截取海平面以上的渲染,然后再将渲染出来

JSP+Servlet演示Struts的基本原理

本文转载自:http://blog.csdn.net/shan9liang/article/details/8686333 shan9liang struts是开源项目.它通过采用 JavaServlet/JSP 技术,实现了基于Java EE Web应用的MVC的应用框架.Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展. 我们用JSP+Servlet实现"一个应用的增改信息",先来看一下,如果没有Struts,我们一般都是怎么做的. 首先看一下项目结构