【动态页面】(二)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. 代理模式 代理模式就是为其他对象提供一种代理来 ...
随机推荐
- date日期比较和格式化方法
时间的比较 var now = new Date();//现在时间 var setDate = new Date(2017,0,5,17,55,55);//设定的时间 laert(now < s ...
- PHPMailer发匿名邮件及Extension missing: openssl的解决
原文链接:http://www.tongfu.info/phpmailer%E5%8F%91%E5%8C%BF%E5%90%8D%E9%82 %AE%E4%BB%B6%E5%8F%8Aextensio ...
- CentOS 6.8安装Python2.7.13
查看当前系统中的 Python 版本 python --version 返回 Python 2.6.6 为正常. 检查 CentOS 版本 cat /etc/redhat-release 返回 Cen ...
- apt-cache madison package-name
apt-cache madison package-name 搜索软件有那些可用版本,
- qt实现头像上传功能(朝十晚八的博客,一堆帖子)
http://www.cnblogs.com/swarmbees/p/5688885.html
- 一段JAVA签名算法的PHP改写
源代码是这样的: public class AuthorizationSignature { public static String createSignature(String verb, Str ...
- iOS cell自动换行
// // DynamicHeightsViewController.h // DynamicHeights // // Created by Matt Long on 9/22/09. // ...
- Linux企业级开发技术(2)——epoll企业级开发之epoll接口
epoll的接口非常简单,总共只有三个函数: 1.int epoll_create(intsize); 生成一个 Epoll 专用的文件描述符,size用来告诉内核这个监听的数目一共有多大.这个参数不 ...
- 动态规划 计数型DP:dobra
令人愉快的单词(dobra)时间限制: 0.1 秒空间限制: 32 MB [问题描述]Lea 在她的一生中碰到过很多单词.其中的很大一部分都使她不愉快.作为补偿,她开始创造一些愉快的单词. Lea 通 ...
- 使用XRDP实现Windows远程桌面Linux系统
一般情况下我们用ssh客户端远程登陆Linux系统,至于图形界面下的linux远程登陆工具,我们一般都会想到vnc,但它的安全性不够,在这里,我将介绍XRDP的安装配置方法.我们可以很方便的通过Win ...