【动态页面】(二)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. 代理模式 代理模式就是为其他对象提供一种代理来 ...
随机推荐
- POJ 3468.A Simple Problem with Integers 解题报告
用树状数组和线段树会比较简单,这里用这道题来学习Splay. 第一次写,代码比较丑 /* 初始化添加一个key值足够大的结点 保证每个需要的结点都有后继 */ #include <iostrea ...
- 《zip命令》-linux命令五分钟系列之九
本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...
- CSS响应式web设计
参考 1. 响应式web设计之CSS3 Media Queries http://www.cnblogs.com/mofish/archive/2012/05/23/2515218.html 2. 用 ...
- BAE Flask UEditor 使用七牛云
1. 配置BAE支持七牛云的SDK BAE的python requirements当然不支持竞争对手了. 解决方法: 把qiniu这个文件包直接放置在你项目的目录中(与其他app同级) 运行会发现缺少 ...
- Python自动化运维之31、Tornado框架
Tornado 官网:http://www.tornadoweb.org/en/stable/ Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本. ...
- MapReduce程序开发之流量求和(八)
1.分析记录手机流量的日志. 2.拿到日志中的一行数据,切分各个字段,抽取出我们需要的字段:手机号,上行流量,下行流量,然后封装成kv发送出去 3.使用java中的map方法: public clas ...
- WPF学习笔记-自定义窗口
代码部分 <Style x:Key="for_noresize_window" TargetType="{x:Type Window}"> < ...
- Standard Numeric Format Strings
The following table describes the standard numeric format specifiers and displays sample output prod ...
- BZOJ 1207 打鼹鼠
Description 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个n*n的网格中,在某些时刻鼹鼠会在某一个网格探 ...
- Struts 2 标签
注:要使用Strust 2标签需<%@ taglib prefix="s" uri="/struts-tags" %> 表单标签: .form标签 ...