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