文章目录

  • 封装的实现
  • Getter/Setter方法
  • 注意事项


封装(encapsulate)是指将数据及相关操作绑定在一起的一种编程机制,使其构成一个不可分割的独立实体。

在Java中,类就是这样一种结构。数据被保护在类的内部,是为了尽可能地隐藏内部细节,只保留一些对外的“接口”使之与外部发生联系。

封装的意义

封装是为了将代码的使用者和实现者分开

  • 使用者能够完全得到自己想要的功能,又不需要思考过多细节。
  • 实现者可以隐藏功能实现的细节,方便灵活进行修改而不影响使用者使用。

 

封装的实现

以上封装的好处,实际上就是访问权限修饰符的实现,Java实现封装一个是靠class封装数据和操作,另外就需要使用访问权限修饰符。

在实际的语法角度,Java当中的封装是依赖于访问权限修饰符来实现。

  • 如果是完全不需要被外界知道的属性,在类中完全可以私有化,直接用private修饰它。这样用“对象名.”就不可以在外界直接访问它了。
  • 如果一个属性有在外界访问的需求,但是希望能够实现对外界访问的控制,那就需要先私有化它,然后再使用Getter/Setter方法

 

Getter/Setter方法

  • Getter方法:提供外界访问的途径,一般命名为getXxx(Xxx为成员变量名),一般直接返回成员变量的值即可。
    语法:
public 该成员变量的数据类型 getXxx(){
	return 成员变量名;
}
  • Setter方法:提供外界赋值的途径,一般命名为setXxx(Xxx为成员变量名),一般使用this关键字完成赋值就可以了。
    语法:
public void setXxx(数据类型 成员变量名){
	this.成员变量名 = 成员变量名;
}

使用Getter/Setter方法的好处

  1. 使用方法后,分离了成员变量的访问和赋值。
  2. 使用方法后,就可以控制成员变量的访问,可以控制赋值,也可以控制取值。

 

注意事项

使用private私有化成员变量,并提供方法给外界访问时,需要注意:

  1. 成员变量的访问权限应该尽量收紧,尽量私有化,当然有必要时也可以给外界权限直接访问。
  2. 在实际开发中,绝大多数情况下,都会将成员变量直接私有化,因为成员变量没必要直接给外界访问,这是一个设计的原则,然后如果外界确有访问需求,再提供Getter/Setter方法。如果确信外部确实有需求频繁访问一个成员变量,那再选择不要私有化它。
  3. Getter/Setter方法的写法非常固定,建议直接使用快捷键“alt+Insert”自动生成。
  4. 对于boolean类型的成员变量来说,Getter方法的名字较为特殊,采用isXxx的形式,这是如果该boolean类型的成员变量名本身就叫isXxx时,会导致该成员变量的Getter方法名和成员变量名一致,就会导致误解发生。所以在很多Java开发规范中,都明确建议boolean类型的成员变量不要命名为isXxx。
  5. 实际开发中,Getter/Setter方法不是给程序员调用的,而是给框架自动调用的。
  6. 静态成员变量,如果也需要Getter/Setter方法,需要注意其Getter/Setter方法也要是静态的。(少见)