【动态页面】(二)Java反射
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反射的更多相关文章
- 重学JAVA基础(二):Java反射
看一下百度的解释: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息 ...
- java反射知识点总结
一.java反射基础 1.1 什么叫java反射? 答:程序运行期间,动态的获取类的基本信息.比如:创建对象,调用类的方法,获得类的基本结构.这样给程序设计提供了很大的灵活性.个人总结就是:根据动态需 ...
- Java反射机制的浅显理解(这篇文章还没写好,留个草稿给自己看的)
目前只是有一个大概的理解,先把自己感觉容易立即的概念放这里,等以后结合实际工作理解深刻了再来补充. 一.什么是Java反射机制?(多种定义) 1. JAVA反射机制是在运行状态中,对于任意一个类,都能 ...
- java反射机制的进一步理解
承上一篇. JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语 ...
- Java基础学习总结(75)——Java反射机制及应用场景
什么是Java反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的以及动态调用对象的方法的功能称为 ...
- Java 反射理解(二)-- 动态加载类
Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编 ...
- SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。
熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...
- 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换
作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...
- Java反射机制剖析(三)-简单谈谈动态代理
通过Java反射机制剖析(一)和Java反射机制剖析(二)的学习,已经对反射有了一定的了解,这一篇通过动态代理的例子来进一步学习反射机制. 1. 代理模式 代理模式就是为其他对象提供一种代理来 ...
随机推荐
- CentOS7下安装配置vncserver
之前试了xmanager,不过好像和在centos6有很大不同,居然没成功,然后找到了vncserver,试了下,成了 参考:http://blog.csdn.net/jiangliqing1234/ ...
- 『重构--改善既有代码的设计』读书笔记----Remove Middle Man
如果你发现某个类做了过多的简单委托动作,你就可以考虑是否可以让客户直接去调用受托类.在Hide Delegate中,我们介绍了封装受托对象的好处,但好处归好处也存在代价,就是当你每次需要在受托对象中增 ...
- Tenth Line
How would you print just the 10th line of a file? For example, assume that file.txt has the followin ...
- Grunt:多个css,js,进行单独压缩
module.exports = function (grunt) { // 构建任务配置 grunt.initConfig({ //读取package.json的内容,形成个json数据 pkg: ...
- 系统默认字体Mac OS,Windows,XP,Lunix
可查获的信息太少,目前得知的是以中文为例, OS : Helvetical,Lucida Grande(西文默认字体) Windows 7: Microsoft Yahei Xp : Simsun,T ...
- VIM快捷键(转)
VIM快捷键:光标移动:四个方向 kh 0 l j ctrl+f, ctrl+b 向下翻页,向上翻页 ctrl+d, ctrl+u ...
- 机器学习实验报告:利用3层神经网络对CIFAR-10图像数据库进行分类
PS:这是6月份时的一个结课项目,当时的想法就是把之前在Coursera ML课上实现过的对手写数字识别的方法迁移过来,但是最后的效果不太好… 2014年 6 月 一.实验概述 实验采用的是CIFAR ...
- Notepad++插件之TextFX
Technorati 标记: notepad Notepad++插件TextFX Characters是一款默认安装的插件,由于功能强大,被编程爱好者认为是最好的Notepad++插件,第二名是L ...
- spart快速大数据分析学习提纲(一)
Spart是什么 Spart是一个用来实现快速而而通用的集群计算平台. 在速度方面,Spart扩展了广泛使用的Mapreduce计算模型,而且高效的支持更多的计算模式,包括交互式查询和流处理.Spar ...
- cf B Red and Blue Balls
思路:把字符串转化为一个二进制,遇到B就是一个数二进制中的1,答案就是这个数. #include <cstdio> #include <cstring> #include &l ...