JavaBean的概述

一.什么是JavaBean

JavaBean是一种规范,也就是对类的要求。它要求Java类的成员变量提供公有getxxx/setxxx方法,这样的成员变量被称之为JavaBean属性。成员变量也必须是私有的。

JavaBean还要求类必须提供仅有的并且是公有的无参构造器,例如:public User() {…},没有提供一个构造器,默认提供公共无参构造器。(为什么在JavaBean中要提供无参构造器,因为在JavaWeb中,<userBean>在创建对象时会根据类名创建对象,就要用到反射来创建Class.forName("类的全路径").newInstance(),这里使用的构造方法就是无参构造方法。还有就是Struts里面,Action也要写无参构造,因为web容器也会根据struts.xml中配置的Action类名来创建对象。)

User.java

package cn.itcast.domain;

public class User {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

去掉get或者set后的方法名再首字母小写就是这个类的属性了。
如getPassword() 方法的属性就是password。但是这只是针对这种格式的getPassword()方法。

二.JavaBean属性

JavaBean属性被分为四种:

  • 单值属性:比如String name等
  • 索引属性:操作数组,其中可能定义两套get,set,一个是针对数组,一个是针对数组元素。
  • 关联属性:如果当前属性值改变时,它就通知所以相关联的属性,说我的值改变了,但是其它相关属性没有权利阻止改变。
  • 限制属性:如果当前属性值改变时,它就通知所以相关联的属性,说我的值改变了,如果其中有一个相关属性阻止当前属性值改变时,当前属性值就不能够改变。

这里只介绍最简单的并且常用的单值属性。

JavaBean属性是具有getxxx/setxxx方法的成员变量。

  • 也可以只提供getxxx方法,这样的属性叫只读属性;
  • 也可以只提供setxxx方法,这样的属性叫只写属性;
  • 如果属性类型为boolean类型,那么读方法的格式可以是get或is。例如名为abc的boolean类型的属性,它的读方法可以是getAbc(),也可以是isAbc();

JavaBean属性名要求:前两个字母要么都大写,要么都小写(这是JavaBean规定死的,如果这样写,在使用struts出现找不到属性异常时,但是还是有解决办法的。JavaBean命名规范验证):
不用管其它格式命名,一般遵循规范写就不会出错,遵循:属性前两个字母要么都大写,要么都小写。(属性是由get/set决定的!)
还有就是不然自己写出来的代码看起来也很丑。

package com.domain;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;

class Test{
    private String AA;
    private String Bb;//错误的JavaBean属性
    private String cC;//错误的JavaBean属性
    private String dd;
    public String getAA() {
        return AA;
    }
    public void setAA(String aA) {
        AA = aA;
    }
    public String getBb() {//错误的JavaBean属性
        return Bb;
    }
    public void setBb(String bb) {
        Bb = bb;
    }
    public String getcC() {//错误的JavaBean属性
        return cC;
    }
    public void setcC(String cC) {
        this.cC = cC;
    }
    public String getDd() {
        return dd;
    }
    public void setDd(String dd) {
        this.dd = dd;
    }

}
public class JavaBean_02 {
    public static void main(String[] args)throws Exception {
        BeanInfo beanInfo = Introspector.getBeanInfo(Test.class);
        PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
        for(int i=0;i<pds.length;i++){
            System.out.println(pds[i].getName());
        }
    }

}

/*打印出来为:
AA
bb
cC
dd
*/

JavaBean可能存在属性,但不存在这个成员变量,这也是可以的。例如:

public class User {
    public String getUsername() {
        return "zhangSan";
    }
}

上例中User类有一个名为username的只读属性!但User类并没有username这个成员变量!
还可以更变态一点:

public class User {
    private String hello;

    public String getUsername() {
        return hello;
    }

    public void setUsername(String username) {
        this.hello = username;
    }
}

上例中User类中有一个名为username的属性,它是可读可写的属性!而User类的成员变量名为hello!也就是说JavaBean的属性名取决与方法名称,而不是成员变量的名称。但通常没有人做这么变态的事情。

总结JavaBean的规范:
1. 必须要有一个公有无参构造器
2. 提供公有get/set方法,如果只有get方法,那么这个属性是只读属性!
3. 属性:有get/set方法的成员,还可以没有成员,只有get/set方法。属性名称由get/set方法来决定!而不是成员名称,如果有成员变量时,成员变量是私有的!
4. 方法名称满足一定的规范,那么它就是属性!boolean类型的属性,它的读方法可以是is开头,也可以是get开头!
5. 类的修饰符也是公共的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值