读书人

JavaBean跟反射

发布时间: 2012-12-26 14:39:28 作者: rapoo

JavaBean和反射
<!-- [if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:AllowPNG/> </o:OfficeDocumentSettings></xml><![endif]-->

理解JavaBean

第一章??????????了解JavaBean

第一节????????概述

JavaBean是一种JAVA语言写成的可重用组件。从用户的观点来看,一个组件可以是一个与你交互的按钮。

最初,JavaBean的目的是为了将可以重复使用的软件代码打包标准。包括按钮可以拖放到开发环境中。之后,JavaBean更被扩展为一个java web 应用的标准部件。在J2EE框架中, JavaBean更被扩展为企业及的应用Enterprise JavaBean(EJB)。

第一节???????????JavaBean的作用

JavaBean组件在任意地方的重用说的是它能够在包括应用程序、其他组件、文档、Web站点和应用程序构造器工具的多种方案中再利用

第二节????????JavaBean的规范

JavaBean必须包含一个无参数的public构造方法。

JavaBean必须包含符合命名规范的get和set方法,以便访问JavaBean的属性。

JavaBean应该是可串行化(serializable)的。

JavaBean必须支持内省,如果Bean有运行时的外观,就必须扩展java.awt.Component类

第三节????????JavaBean的类型

简单属性的JavaBean:该JavaBean中的SetXXX()和GetXXX()方法比较简单,只负责设置属性值或者取得属性值

绑定属性的JavaBean:该JavaBean中的SetXXX()和GetXXX()方法,除了负责设置属性值或者取得属性值外,还可以通知其他JavaBean自身改变的信息

约束属性的JavaBean:比绑定属性的JavaBean功能更复杂。

第二章??????????反射

第一节????????概述

JavaBean支持内省,利用这种机制,我们可以知道JavaBean的哪些方法是可以被其他对象访问或被GUI生成工具访问。这种内省被认为是JavaBean API规范使用的一种特殊形式的“反射”。

Java的反射技术是java程序的特征之一,它允许运行中的Java程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。

使用反射可以获得Java类中各个成员的名称并显示出来。简单的说,反射就是让你可以通过名称来得到对象(类,属性,方法)的技术。

第二节????????反射的作用

判断某个对象所属的类型(Class)。

取得类型(Class)的属性,方法,构造体和父类的相关信息。

找出接口中的常量和方法定义。

为一个执行期才得知名称的类产生对象(即动态创建对象)。

第三节????????反射的原理

对象创建过程:比如要创—og类的三个对象

Dog d1 = newDog();

Dog d2 = newDog();

Dog d3 = newDog();

在这个过程中,JVM的底层实现过程如下:

第一步?????? ????? JVM利用DogClassLoader先将Dog类加载到内存,然后马上产生了一个Class类型的对象,该对象可以看成是一个模型,以后无论创建多少个Dog类的实例都是利用该模型来生成。所以一个类所对应的Class类型的对象只有一个。

第二步?????? 根据这个模型生成Dog类的三个实例d1、d2、d3。

第三步? ????? 反射正是利用了java的这种加载方式主动完成了对象的创建及使用。

第四节????????反射的使用步骤

遵循三个步骤:

第一步?????? 获得你想操作的类的 java.lang.Class 对象

第二步?????? 调用诸如 getDeclaredMethods 的方法

第三步?????? 使用 reflection API 来操作这些信息

(一)??获得你想操作的类的 java.lang.Class 对象

获得Class对象的方式主要有以下三种:

方式一:如果一个类的实例已经得到,你可以使用

【Class c = 对象名.getClass(); 】

????????? 例: TextField t = new TextField();

???????????????? ?Class c = t.getClass();?

???????????????? ?Class s = c.getSuperclass();

方式二:如果你在编译期知道类的名字,你可以使用如下的方法

【 Class c =JButton.class;? 】或者【Class c = Integer.TYPE;】

方式三:如果类名在编译期不知道, 但是在运行期可以获得, 你可以使用下面的方法

【 Class c =Class.forName(strg); 】

(二)??调用诸如 getDeclaredMethods 的方法

一个类通常由三部分组成——属性、普通方法、构造方法。反射机制中为获取以上三个部分分别提供了常用类及方法。

Filed类:????????????? 提供有关类或接口的属性信息。

Constructor类:?? 提供关于类的单个构造方法的信息以及对它的访问权限。

Method类:???????? 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。

一.???Filed类常用方法

Field????????? getField(String name)?获得指定的公共字段

Field[]??????? getFields()??获得类的所有公共字段

Field????????? getDeclaredField(String name)?获得指定的字段

Field[]??????? getDeclaredFields()?获得类声明的所有字段

二.???Constructor类常用方法

ConstructorgetConstructor(Class[] params)???

获得使用特殊的参数类型的公共构造函数

Constructor[]getConstructors()

获得类的所有公共构造函数

ConstructorgetDeclaredConstructor(Class[] params)?

获得使用特定参数类型的构造函数(与访问级别无关)

Constructor[]getDeclaredConstructors()

获得类的所有构造函数(与访问级别无关)

三.???Method类常用方法

MethodgetMethod(String name, Class[] params)

使用特定的参数类型,获得命名的公共方法

Method[]getMethods()

获得类的所有公共方法

MethodgetDeclaredMethod(String name, Class[] params)

使用特定的参数类型,获得类声明的命名的方法

Method[]getDeclaredMethods()

获得类声明的所有方法

(三)????? 利用reflection API 来操作?属性、方法、或构造方法

在(二)中我们已经可以获得了类的几个主要组成部分——属性、构造方法、方法各自的对象了,接下来我们就可以控制这些对象来完成一些操作了。

利用反射技术而进行的常用操作主要有两个:

一、动态的创建对象

二、执行方法

一.???利用反射动态创建对象

使用new操作符创建对象是我们比较熟悉的方式,使用反射技术在程序执行过程中可以动态的创建对象。

二.???利用反射执行方法

既然可以在程序执行过程中动态的创建对象,那么当然可以利用方法的名称来执行方法了。

读书人网 >编程

热点推荐