黑马程序员技术交流社区

标题: 想请教一下,关于javaBean方面的 [打印本页]

作者: 小马过河    时间: 2013-12-4 00:05
标题: 想请教一下,关于javaBean方面的
看了张老师的视频,有些糊涂。讲解javaBean的开始说这是一个特殊的类,类的属性是其去掉set和get后的名字。而成员变量是不可见的。

结果他举例直接都是调用成员方法x值。

感觉好矛盾好矛盾,越看越晕。有人能讲解下javaBean的应用场景么,以及它的操作流程?
不要求代码,有比较明晰的思路就行哈{:soso_e117:}

作者: quan23355    时间: 2013-12-4 08:51
本帖最后由 quan23355 于 2013-12-4 08:58 编辑

在一个Reflectpoint类中,我们可以把它当作一个普通类来操作,比如该类对象调用getX方法可以得到该对象私有成员属性x的值。但我们仔细看一下该类,你会发现有一种规律,比如:setX(中文意思是设置X)、getX(中文意思是获取X值),没错,这种规律符合settergetter命名规范,这时我们就可以把这种类称为javaBean类,由这种规范推算出来的成员属性称之为javaBean属性,至于java类内部的成员属性是怎样的我们根本不用去管,也管不了,因为那些都是私有的成员变量。当一个类一旦成为javaBean类时,我们就可以用一些特殊的方式去操作它,比如内省。
使用简单内省操作javaBean类(认真看注释,相信你会看明白的)
  1. calss Reflectpoint{
  2.         private int x; //私有成员属性
  3.         private int y; //私有成员属性

  4. Reflectpoint(int x,int y){//带参构造函数
  5.         this.x=x;
  6.         this.y=y;
  7. }

  8. //setter,getter方法。
  9.         public void setX(int x){//设置x的值
  10.         this.x=x;
  11. }
  12. public int getX(){//获取x的值
  13.         return this.X
  14. }
  15. public void setY(int y){//设置y值
  16.         this. y= y
  17. }
  18. public int getY(){//获取y值
  19.         return this.Y;
  20. }
  21. }
复制代码


  1. public class IntroSpectorTest
  2. {
  3. public static void main(String[] args) throws Exception {
  4.                         ReflectPoint pt1 = new ReflectPoint(3,5);
  5.                         String propertyName = "x";//定义一个我们认为可能是javaBean的属性x(由公有方法可以得出),
  6.                         //"x"-->"X"-->"getX"-->MethodGetX-->
  7. PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());//创建一个指定javaBean类ReflectPoint,指定属性(x)的javaBean属性对象。
  8.                         Method methodGetX = pd.getReadMethod();//获取属性对应的getX方法
  9. Object retVal =methodGetX.invoke(pt1); //执行该方法,用指定的对象去调用该方法,相当于pt1.getX(),               
  10. System.out.println(retVal);//创建pt1对象时传入的x值为3,因此打印3
  11. PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,pt1.getClass());
  12.                         Method methodSetX = pd2.getWriteMethod(); //获取setX方法
  13.                         methodSetX.invoke(pt1,7); 执行setX方法,相当于pt1.setX(7);
  14.                       System.out.println(pt1.getX);//输出7,设置成功。
  15. }
复制代码








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2