Java 程序中有效字段的可见性
发表于:2007-07-01来源:作者:点击数:
标签:
字段,又称为属性或成员属性,是对象的数据方面。字段的可见性定义 Java 对象对其的访问级别。本周的讨论改编自 The Object Primer 2nd Edition 的第 7 章和第 8 章,着重讨论字段可见性的类型、如何实现字段及如何访问它们。 表 1 描述了字段可见性的三种类
字段,又称为属性或成员属性,是对象的数据方面。字段的可见性定义 Java 对象对其的访问级别。本周的讨论改编自 The Object Primer 2nd Edition 的第 7 章和第 8 章,着重讨论字段可见性的类型、如何实现字段及如何访问它们。
表 1 描述了字段可见性的三种类型,标示了“统一建模语言 (UML)”符号、Java 关键字、可见性含义的描述和对该可见性推荐的正确用法。您可以看到,字段可见性的规则和标记都与成员函数可见性的规则和标记一致。后者在讨论过。
表 1. Java 程序中字段的可见性 可见性 | UML 符号 | Java 关键字 | 描述 | 推荐用法 |
公共 | + | public | 任何其它对象或类中的任何其它方法都可以访问公共字段。 | 不要将字段定义为公共的。 |
受保护 | # | protected | 声明该字段的类中的任何方法或者该类子类中定义的任何方法都可以访问受保护字段。 | 不要将字段定义为受保护的 |
专用 | - | private | 只有声明该字段的类中的方法才可以访问专用字段,该类子类中的方法是不能访问的。 | 所有字段都应该是专用的,并由 getter 和 setter 方法(访问器)访问。 |
据我的经验,为了隐藏和封装信息,所有字段都应该声明为专用的。将字段声明为受保护时,子类中的方法就有可能直接访问它们,这样就可能有效地增加类层次结构中的耦合。这样增加的耦合会使类的维护和增强更为困难;因此,应该避免这种做法。
为了说明如何实现具有不同可见性的字段,我在图 1 中提供了对 Address 类中各个字段的声明。在源代码示例中,您会看到有些字段可能声明成公共的或受保护的,但这不是个好主意。
图 1. 声明 Address 类的字段 /*** The city street of the address** @example 1701 Enterprise Way*/private String street;/*** The name of the city** @example Metropolis*/protected String city;/*** The state/province that the address is in*/public State state;/*** The ZIP code that the address is in** @example 90210*/private String zipCode; |
决不应该直接访问字段;而应该使用访问器。访问器方法涉及两种方法:
setters 和
getters(有时分别称为
mutators 和
accessors)。setter 修改字段的值,而 getter 获取它的值。唯一我会考虑违反这一规则的情况是在访问器方法明显影响到应用程序的
性能,而又没有任何其它替代方法将性能改进到可接受的程度时。即使在那种情况下,我仍会尝试尽量减少直接访问的字段数。顺便说一句,自 1995 年秋开始,我就一直在从事 Java 技术,至今还没有破坏过这个规则。同时,我已记不清曾有多少
开发人员抱怨访问器方法的性能了。
Java
程序员必须掌握的一个基本概念是:允许对字段直接操作的访问器方法
只能是访问器本身。当然,有可能在定义字段的类的方法中直接访问专用字段,但是您不会这样做的,因为这将增加类中的耦合。实际上,访问器的使用是 Enterprise JavaBean (EJB) 2.0 环境中对所有持久字段强制执行的一种手段。以后的提示中会涉及访问器方法的有效使用。
原文转自:http://www.ltesting.net