首页常见问题正文

JavaBean是用来干嘛的?

更新时间:2023-02-08 来源:黑马程序员 浏览量:

IT培训班

  在JSP网页开发的初期阶段,并没有框架与逻辑分层的概念,需要将Java代码嵌入到网页中处理JSP页面中的一些业务逻辑,如字符串处理和数据库操作等。这种开发方式虽然简单,但是如果将大量的Java代码嵌入到JSP页面,必定会为后期的修改和维护带来一定的困难。同时,将Java代码写入JSP页面中起不到代码重用的作用,也不能体现出面向对象的思想。为了弥补这种开发方式的缺点,JavaBean应运而生。

  JavaBean是Java开发语言中一个可以重复使用的组件,它本质上就是一个Java类。我们可以引用JavaBean组件封装数据或者完成某些业务逻辑,如封装表单数据、字符串处理和数据库操作等。使用JavaBean后,人们通常会将HTML与Java代码相分离,将Java代码单独封装成一个处理某种业务逻辑的类中,然后在JSP页面中调用此类,这样就降低了HTML代码与Java代码之间的耦合度,简化了JSP页面,提高了Java代码的重用性和灵活性。这种与HTML代码相分离后,使用Java代码封装的类就是JavaBean组件。

  为了规范JavaBean的开发,Sun公司发布了JavaBean的编写规范,具体如下。

  ·JavaBean必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的默认构造方法。

  ·JavaBean提供公共的getter和setter方法,以方便对属性进行读/写操作。

  为了让读者对JavaBean有一个直观的认识,下面讲解一个简单的封装数据的JavaBean,如文件11-10所示。

  文件11-10 Book.java

package com.itheima.javabean;
public class Book {
    private double price;
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price=price;
    }
}


  在文件11-10中,定义了一个Book类,该类就是一个JavaBean,它没有定义构造方法,Java编译器在编译的时候,会自动为这个类提供一个默认的构造方法。Book类中定义了一个price属性,并提供了公共的getPrice()和setPrice()方法供外界访问属性。

  在讲解面向对象时,经常会使用类的属性,类的属性指类的成员变量。在JavaBean中同样也有属性,但是它和成员变量不是一个概念,它是以方法定义的形式出现的,这些方法必须遵循一定的命名规范,例如,如果在JavaBean中包含一个String类型的属性name,那么在JavaBean中必须至少包含getName()和seName()方法中的一个,这两个方法的声明如下所示:

public String getName() {...}
public void setName(String name) {...}

  在上述两个方法声明中,方法体内的内容用“...”表示省略。关于这两个方法的相关讲解具体如下。

  ·getName()方法:称为getter方法或者属性访问器,该方法必须以小写的get前缀开始,后跟属性名,属性名的第一个字母必须大写,例如,nickName属性的getter方法为getNickName()。

  ·setName()方法:称为setter方法或者属性修改器,该方法必须以小写的set前缀开始,后跟属性名,属性名的第一个字母必须大写,例如,nickName属性的setter方法为setNickName()。

  如果一个属性只有getter方法,则该属性为只读属性,如果一个属性只有setter方法,则该属性为只写属性,如果一个属性既有getter方法,又有setter方法,则该属性为读/写属性。通常来说,在开发JavaBean的时候,其属性都定义为读/写属性。

  需要注意的是,对于JavaBean属性的命名方式有一个特殊情况,如果属性的类型为boolean,它的命名方式应该使用is/set而不是get/set。例如,有一个boolean类型的属性married,则该属性所对应的方法声明如下所示:

public boolean isMarried() {...}
public void setMarried(boolean married) {...}

  从上面的代码中可以看出,married属性的setter方法命名方式没有变化,而getter方法变成了isMarried()方法,当然,写成getMarried()也是可以的,只不过isMarried()更符合命名规范。

分享到:
在线咨询 我要报名
和我们在线交谈!