封装数据的JavaBeanJSP技术

Posted Blue92120

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装数据的JavaBeanJSP技术相关的知识,希望对你有一定的参考价值。

  为了规范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()和setName()方法中的一个,这两个方法的声明如下所示:

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

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

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

  ·getName()方法:称为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()更符合命名规范。

区块链技术语言(二十三)——Go语言面向对象:方法

封装是面向对象三大特性之一。封装的好处,一个是增加代码内聚性,就是将数据和对数据的操作封装在一起,提高可复用性和可维护性;还有就是信息隐藏,就是把不该暴露的信息藏起来,通过访问控制来隐藏数据,不被外界干扰。也就是说,一个对象就是一个封装了数据和操作这些数据的代码的逻辑实体。Go语言没有封装这个名词,但它通过方法实现了封装的特性。

一、Go语言方法


方法,本质上是一个函数。与普通函数的格式有一点不同,它在关键字 func 和方法名中间加入了一个特殊的接收器类型。其格式如下:

技术图片

注:

a. 接收者t的名字自定义,它可以被方法的内部内容访问;
b. 类型拥有的所有方法名都必须是唯一的,但不同的类型可以使用相同的方法名;
c. 建立在Type类型的方法,让Type类型的数据和对此数据进行的代码操作捆绑在一起,实现了封装。
1.1 结构体类型的接收者与基本类型的接收者

接收者既可以是结构体类型,也可以是基本类型。接收者类型为结构体类型,定义的结构体和定义在结构体上的方法同属一个main包,所以方法可以直接绑定到结构体类型的接收者上。但是Go语言的基本类型位于builtin包,定义于main包的方法不能直接绑定在基础类型的接收者,所以必须先对基本类型声明类型别名。

1.1.1 结构体类型接收者

接收者可以被方法内部内容访问,当接收者类型为结构体类型时,方法内部也可以访问结构体的成员变量,访问格式为:

技术图片

方法的调用格式为:

技术图片

注:“变量名.方法名”被称为选择器。

技术图片

1.1.2 基本类型接收者

在使用方法之前先对基本类型声明类型别名,再使用方法。方法的调用格式为:

技术图片

注:“变量名.方法名”被称为选择器。

技术图片


1.2 值类型的接收者与指针类型的接收者

接收者是值类型:方法调用时,不论传入的对象是值类型还是指针类型,接收器都会将它们转化为值类型,在方法内部对值类型接收者进行改变,对该变量没有任何影响;接收者是指针类型:方法调用时,不论传入的对象是值类型还是指针类型,接收器都会将它们转化为指针类型,在方法内部对指针类型接收者进行改变,对该变量有影响。

技术图片

二、方法和函数的区别

在Go语言里,方法本质上是函数,但它与普通函数还有点不同,如表1所示。

技术图片


2.1 方法和函数在传入对象方面的区别
2.1.1 接收者为值类型的方法和参数为值类型的函数的区别

函数参数为值类型,它只能接收值类型的实参;方法的接收者为值类型,它既可以接收值类型的传入对象,也可以接收指针类型的传入对象。

技术图片

2.1.2 接收者为指针类型的方法和参数为指针类型的函数的区别

函数参数为指针类型,它只能接收指针类型的实参;方法的接收者为指针类型,它既可以接收值类型的传入对象,也可以接收指针类型的传入对象。

技术图片


2.2 多个方法和多个函数在是否可以同名方面的区别

接收者类型不同,方法名可以相同,即相同名字的方法可以定义在不同的类型上。但是一个程序不能有两个相同名字的函数。

技术图片

三、方法值和方法表达式

方法的调用除了“对象变量名.方法名(参数)”这种形式以外,还有另外两种表现形式:方法值和方法表达式。

3.1 方法值

方法调用的一种表现形式是方法值,即选择器作为一个值赋值给一个变量。此时这个变量是一个函数类型变量,它把方法绑定到接收者。函数只需提供实参而不需要提供接收者就能够调用。

技术图片


3.2 方法表达式

方法调用的另一种形式是方法表达式,如表2所示。

技术图片

注:

a. 引用的方法表达式被还原成为普通函数样式,将此表达式赋值给一个变量,调用时接收者是第一个参数,必须显式传参。
b. 若方法接收器类型是值类型:当方法表达式中的类型是值类型T,方法表达式调用时,接收者也必须是值类型p;当方法表达式中的类型是指针类型(*T),方法表达式调用时,接收者也必须是指针&p;
c. 若方法接收器类型是指针类型:方法表达式中的类型只能是指针类型(*T),方法表达式调用时,接收者必须是指针&p。

技术图片

四、方法的延迟调用

defer不仅限于函数的调用,也可以用于方法的延迟调用。

技术图片

参考资料
[1] 许式伟,吕桂华.Go语言编程[M].北京:人民邮电出版社,2012:62-67.
[2] 谭浩强.C++面向对象程序设计[M]. 清华大学出版社,2006
[3] 陈维兴,陈昕.C++面向对象程序设计[M]. 人民邮电出版社,2010

以上是关于封装数据的JavaBeanJSP技术的主要内容,如果未能解决你的问题,请参考以下文章

Java面试总结之SE基础基本数据类型

Java se课程设计详解——数据库接口类

Java面试题-J2SE基础

Java核心技术读书笔记12-Java SE 8引入的流

初始Java 来自Java SE的第六节课 类和对象

Java SE- 基础语法