【动态页面】(二)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. 代理模式 代理模式就是为其他对象提供一种代理来 ...
随机推荐
- WampServer修改端口及菜单Localhost
一.修改Apache端口 1.在界面中选Apache,弹出隐藏菜单选项,打开配置文件httpd.conf: 2.找到 Listen 80: 3.将 80 改成 8080(当然自己也可以设定别的不使用的 ...
- Java学习----this和super(在继承中)
public class Base { /*public Base() { System.out.println("Base 类的初始构造方法"); }*/ public Base ...
- Android安装 sdk+jdk+Eclipse+Adt开发工具
根据别人提供的手册和安装过程体验加以更新和详细描述 安装Android开发工具 开发Android应用程序的门坎并不高,因为Google已经为Android应用程序开发提供了免费而且跨平台的集成开发环 ...
- Array.prototype.map()
mdn上解释的特别详细 概述 map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组. 语法 array.map(callback[, thisArg]) 参数 callb ...
- 通过Java代码浅谈HTTP协议
最近刚看了http协议,想写点东西加深一下理解,如果哪儿写错了,请指正. 1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(W ...
- launchpad bzr
在lp注册 一个 lp ID, 比如 alangwansui 然后添加 SSH keys.为自己的管理添加权限. 注册一个项目的 比如 melody. 然后就可以开始使用bzr 在这个项目下建 ...
- Vim及VimScript资料总结《转载》
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Vim教程 入门 Vim 实用技术 Learning the vi and Vim Editors A Byte of ...
- Spark的RDD编程(二)公众号undefined110
创建RDD有两种方式:①读取外部数据集,lines=sc.textFile("README.md").②对一个集合进行并行化,lines=sc.parallelize([" ...
- Lambda表达式中的表达式lambda和语句lambda区别
Lambda表达式可分为表达式lambda和语句lambda 表达式lambda:表达式位于 => 运算符右侧的lambda表达式称为表达式lambda (input parameters) = ...
- 关于sql server 代理(已禁用代理xp)
由于有数据库在恢复,导致计划不能执行,先操作如下: 关闭数据库的服务..然后把数据库文件剪切出来.然后在起服务.进入SqlSever删除数据库.因为文件已经剪切走了.所以不会删除文件.再把数据库拷到M ...