Java的反射机制是Java语言非常重要的一个特性。先从Sun官网上看一下官网是怎样定义反射机制的。

大致翻译一下,翻译的可能不是非常准确。

反射(Reflection)是Java程序设计语言的一个特性,它要求Java程序执行的时候检查或自检,而且对内部的属性进行操作。比如,它能够让一个Java类获得它自己全部的成员名称而且显示出来。这样的能够从一个Java类内部进行检查和操作的能力听起来可能不是非常受喜欢,可是在其它程序语言中这样的特性(功能)根本就不存在。

比如,对于Pascla、C或者C#程序就没有办法来获得其内定义的函数。还有一个实实在在存在的反射的样例就是在JavaBeans中,软件组件能够通过构造器来操作。

这个构造器就是利用反射来获得Java的属性(类)由于它们是动态载入的。

换句话,通俗一点来理解Java的反射机制,就是在执行状态下。对于随意一个类都能动态获得其类下的属性和方法。对于随意一个对象都可以调用它的随意一个方法。这样的动态获取信息和动态调用对象的方法的功能称为Java的反射机制。并且这样的机制是Java语言所特有的的,是别的程序设计语言所不具备的。

如今非常多开源框架都使用反射机制,像Hibernate、Struts都是利用反射机制来实现的。可是我们为什么要用反射机制呢?想想我们以往是怎样实现的,在编译的时候确定一个类型。比方一个类或者一个对象,都是写死的。固定写好,然后实例化对象或者去调用某个方法,这样的方式叫做静态编译。那么与之相应的就是动态编译了,也就是我们这篇博客讲的Java反射,它的实现原理是在执行的时候再确定类型,然后绑定对象。这样的动态编译的特性极大限度的发挥了Java语言的强大功效,增强了Java的灵活性,体现了多态的应用。

假设上面那么说你还不能理解。那就换种方式。

Java的反射就是指在程序执行时可以获取自身的信息,在Java中仅仅要给定类的名字,那么就行通过反射机制来获取类的全部信息。想想我们在OA时运用的反射机制由于不确定传进来是哪个实体。是Role还是Apartment还是User。就利用Java的反射机制Class<T>,细致回顾一下当时的情景。

就是我们有三张表,Role、Apartment和User,每一个表都有增删改查四个操作,我们之前不懂Java反射机制的时候,可能就得依据不同的表创建不同的Dao类。像我们上面,就得创建三个Dao类。里面大量反复同样的方法。仅仅是类名不一样。

如今有了Java的反射机制,我们就得从原来的的老圈子里跳出来。想想人类真是聪明。开发出工具也就算了,还想着不断改进怎么能复用性高、效率高。所以我们如今用Java的反射机制,仅仅创建一个Dao类,然后把增删改查的方法写进去。可是把类型空出来。到时候仅仅要传入不同类型的对象就能够操作了,无需有多少表就创建多少个Dao类,反射机制会自己主动帮我们做这件事。就好比有个酒窖有三个酒缸。分别装着蓝酒、绿酒和黄酒。酒窖老板每天在门口摆一种酒缸放在门口卖酒。曾经的做法就是:比方今天卖蓝酒,就搬着装蓝酒的酒缸放在门口;买绿酒就搬着绿酒的酒缸到门口。后来一个伙计想了一个办法,就是在门口放一个空酒缸,安一个龙头在酒缸上,今天想卖什么酒直接往门口的酒缸里面注即可了,这样就不用来回搬着酒缸了。

呵呵,多么笨的老板,当然这个故事是我杜撰的,目的仅仅是想讲明确Java的反射机制.

所以回过头来说。Java的反射机制能够实现动态创建对象和编译,为了更好的理解,我们再来杜撰一个样例。如今我是一个班主任。我曾经是这么分配工作的,小红负责扫地;小蓝负责擦玻璃;小黑负责擦黑板。小黄负责倒垃圾,每一个人仅仅负责自己的工作。我看到地没扫,就得记着安排小红去扫地......

可是这样分配工作效率非常低,由于我每每想着要安排一个工作,就得想着安排哪个固定的人员去做这件事。

所以有了Java反射机制之后。我更改了以往的安排工作的方式。

这样一来,利用Java的反射机制。你也不知道你要new哪个对象去做什么工作。原来直接创建对象去运行对应的工作。如今利用Java的反射机制,在程序运行的过程中,动态创建对象然后去调用它的随意一个方法和属性去运行其职能。不知道这样讲你对Java的反射机制明确了没有?下篇文章我会介绍通过Java的反射机制读取Jar包的类名和属性。敬请期待吧!

【动态页面】(二)Java反射的更多相关文章

  1. 重学JAVA基础(二):Java反射

        看一下百度的解释:       JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息     ...

  2. java反射知识点总结

    一.java反射基础 1.1 什么叫java反射? 答:程序运行期间,动态的获取类的基本信息.比如:创建对象,调用类的方法,获得类的基本结构.这样给程序设计提供了很大的灵活性.个人总结就是:根据动态需 ...

  3. Java反射机制的浅显理解(这篇文章还没写好,留个草稿给自己看的)

    目前只是有一个大概的理解,先把自己感觉容易立即的概念放这里,等以后结合实际工作理解深刻了再来补充. 一.什么是Java反射机制?(多种定义) 1. JAVA反射机制是在运行状态中,对于任意一个类,都能 ...

  4. java反射机制的进一步理解

    承上一篇. JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语 ...

  5. Java基础学习总结(75)——Java反射机制及应用场景

    什么是Java反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的以及动态调用对象的方法的功能称为 ...

  6. Java 反射理解(二)-- 动态加载类

    Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编 ...

  7. SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

    熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...

  8. 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换

    作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...

  9. Java反射机制剖析(三)-简单谈谈动态代理

    通过Java反射机制剖析(一)和Java反射机制剖析(二)的学习,已经对反射有了一定的了解,这一篇通过动态代理的例子来进一步学习反射机制. 1.     代理模式 代理模式就是为其他对象提供一种代理来 ...

随机推荐

  1. Android界面布局学习总结

    参考文章: http://blog.csdn.net/shakespeare001/article/details/7843460 http://www.cnblogs.com/w-y-f/p/412 ...

  2. SGU 148.B-Station

    时间限制:0.25s 空间限制:4M  题目 在离著名的国家Berland不远的地方,有一个水下工作站.这个工作站有N层.已知:是第层装有Wi的水,最多可以容纳Li的水,恐怖分子炸毁第i的代价是Pi. ...

  3. java中的异常结构

    1.基类为Throwable. 2.Error和Exception分别继承Throwable. 3.Error类异常描述了Java运行系统中的内部错误以及资源耗尽的情形.应用程序不应该抛出这种类型的对 ...

  4. js 的其它运算符和优先级

    三元运算符: 语法为 exp1? exp2:exp3 判断 exp1是true 和 false  如果true,则返回exp2  ,如果false ,则返回exp3 <script> if ...

  5. 使用Thinkphp框架开发移动端接口

     本文给大家分享的是使用thinkphp框架开发移动端接口的2种方法,一种是开发API,另外一种是实现移动端访问自动切换移动主题模板,从而实现伪app访问,下面我们就来详细看下如何实现吧. 方案一:给 ...

  6. python 图片压缩存储

    python(PIL)图像处理(等比例压缩.裁剪压缩) 缩略(水印)图 http://outofmemory.cn/code-snippet/12264/python-PIL-image-proces ...

  7. 十月例题F题 - City Game

    F - City Game Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Bob is a st ...

  8. python学习的一些感悟

    首先声明,这里用到的库是在coursera上学习时,老师建立的一个库 #timer import simplegui import random # global state message = &q ...

  9. sphinx插入css

    使用role指令达到目的. We can put following lines at the beginning of our RST file to specify its style. .. r ...

  10. POJ 2289 Jamie's Contact Groups(多重匹配+二分)

    题意: Jamie有很多联系人,但是很不方便管理,他想把这些联系人分成组,已知这些联系人可以被分到哪个组中去,而且要求每个组的联系人上限最小,即有一整数k,使每个组的联系人数都不大于k,问这个k最小是 ...