黑马程序员---java高新技术之内省

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

 java内省学习总结:
  1.关于javabean:JavaBean是一种特殊的java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有字段,且方法名符合某种命名规范。当一个类符合某种特殊的命名规则时,如函数以get或set开头,就可以把这样的类当成javabean类来使用,以get或set开头的函数的访问权限都为public
 2.javabean类的属性是根据函数名(以get或set开头)来推断的,去掉函数的get或set前缀后的名称即为属性名(当第二个字母是小写时把第一个字母小写,当第二个字母是小写时首字母保持原样)。
 3.一个符合javabean特点的类可以当成普通类来使用,但当成javabean可以带来额外的好处。
 4.如果要在两个模块之间传递多个信息,可以将这些信息封装到一个javabean中,这种JavaBean的实例对象通常称为值对象

 以下是对常用的对javabean操作的一些示例代码,用作测试的JavaBean为Test类:

 
/**
  * 这个是演示JavaBean的测试类,该类中定义了一些私有的属性,并提供了属性的get和set
  * 方法.
  */
 class Test{
    int x=0;
    int y=0;
    java.util.Date birthday=new java.util.Date();
  public int getX() {
      return x;
  }
  
  public void setX(int x) {
      this.x = x;
  }
 
  public int getY() {
      return y;
  }
 
  public void setY(int y) {
      this.y = y;
  }  
  public java.util.Date getBirthday(){
      return this.birthday;
  }
  public void setBirthday(java.util.Date birthday){
     this.birthday=birthday; 
  }
  }
}

  1.通过PropertyDescriptor类获得一个类的某个属性的get方法,以test类为例:

 
    /**
     * PropertyDescriptor是sun公司原生自带的操作javabean的类,通过该类获取javabean的属性的读方法
     * 和写方法,然后通过读方法和写方法操作javabean的属性值,通过PropertyDescriptor操作javabean
     * 比较繁琐,但能操作基本类型属性和复杂类型属性
     * 
     */
    Test t=new Test():
    PropertyDescriptor pd==new PropertyDescriptor("x", test.class);//获取该javabean的属性x的属性描述符
    Method method=pd.getReadMethod();//获取读方法
    method.invoke(t);//通过读方法读取值
    Method method1=pd.getWriteMethod();//获取写方法
    method.invoke(t,5);//通过写方法写入值

 2.通过introSpector类和BeanInfo类获得属性:
  { CSDN:CODE:426415}


 3.使用Beantutils设置和读取JavaBean的属性:

    /**
     * Beanutils是一个很方便操作javabean的工具类库,它不仅能方便的操作javabean中的简单属性
     * 还能方便的操作JavaBean中的复杂属性,对于复杂属性的操作,可以通过beanutils中的级联方式
     * 进行操作,这样,不管javabean中复杂属性有多复杂,都可以很方便的操作
     * 
     */
    Test t=new Test();
    System.out.println(Beanutils.getProperty(t,"x"));//通过Beanutils获得属性值并打印出来
    Beanutils.setProperty(t,"x",100);//通过Beantuils设置属性值
    
    //使用Beantutils设置和读取级联属性值,如test中birthday中的time:
    System.out.println(Beanutils.getProperty(t,"birthday.time"));//通过Beanutils读取级联属性
    Beanutils.setProperty(t,"birthday.time","200");//通过Beanutils设置级联属性

 4.使用PropertyUtils设置和读取JavaBean的属性:
    /**
     * propertyUtils的用法和BeanUtils基本没什么区别,唯一不同的是propertyUtils给属性赋的是实际类型的值
     * 这样对于复杂属性也能直接赋值,而beanutils是将字符串通过转换再赋给javabean中的属性的,对于有些类型
     * 的属性,beanUtils是不能将字符串转换成对应的实际类型的,这一点上Propertyutils更强一点,不过BeanUtils
     * 可以通过注册转换函数来解决这个问题
     */
    Test t=new Test():
    System.out.println(PropertyUtils.getProperty(t,"x"));//  PropertyUtils读取和beanutils没什么区别
    PropertyUtils.setProperty(t,"x",155);//PropertyUtils设置属性时用的是属性实际的类型,而不是字符串类型,这和Beanutils的字符串不同
 

    ---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

详细请查看:www.itheima.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值