知识点

相关文章

更多

最近更新

更多

《JAVA代码规范》(十)成员函数和方法标准 (6.1-6.6)

2019-03-28 17:36|来源: 苦力工

6       成员函数和方法标准

6.1      命名函数和成员方法

成员函数的命名应采用完整的英文描述符,大小写混合使用:所有中间单词的第一个字母大写。成员函数名称的第一个单词常常采用一个有强烈动作色彩的动词。

例:

openAccount()

printMailingLabel()

save()

delete()

这种约定常常使人一看到成员函数的名称就能判断它的功能。虽然这种约定要使开发者多做一些输入的工作,因为函数名常常较长,但是回报是提高代码的可理解性。

6.2      命名存取成员函数和方法

获取成员函数应在名字中加上 get + 字段名,除非字段表示的是一个布尔值(“真”或者“假”),这时获取函数名中应加上 is + 字段名。无论何种字段类型,设置成员函数应在名字中加上 set + 字段名。注意字段名始终采用大小写混合,所有单词的第一个字母要大写。命名约定在JDK 中被始终使用,在 beans development 中也必须使用。

Examples:

字段

类型

获取函数名

设置函数名

firstName

字符串

getFirstName()

setFirstName()

address

地址

对象

getAddress()

setAddress()

persistent

布尔值

isPersistent()

setPersistent()

customerNo

整型

getCustomerNo()

setCustomerNo()

orderItems

OrderItem

的对象数组

getOrderItems()

setOrderItems()

6.3      命名构造函数

构造函数是在一个对象初次生成时,完成所有必需的初始化的成员函数。构造函数与它所属类的名字总是相同的。例如,类 Customer 的构造函数是 Customer()。注意大小写一致。

例:

Customer()

SavingsAccount()

PersistenceBroker()

这个命名约定由 Sun 公司设定,必须严格遵守。

6.4      成员函数和方法的可见性

良好的程序设计应该尽可能减小类与类之间耦合,所遵循的经验法则是:尽量限制成员函数的可见性。如果成员函数没必要公有 (public),就定义为保护 (protected);没必要保护(protected),就定义为私有 (private)

可见性

说明

正确用法

public

公有成员函数可被任何其它对象和类的成员函数调用。

当该成员函数必须被该函数所在的层次结构之外的其他对象和类在访问时。

protected

被保护的成员函数可被它所在的类或该类的子类的任何成员函数调用。

当该成员函数提供的行为被它所在类的层次结构内部而非外部需要时。

private

私有成员函数只可以被该类所在的其它成员函数调用,该类的子类不可以调用。

当该成员函数所提供的行为明确针对定义它的类时。私有成员函数常常是重新分配要素的结果。重新分配要素又叫重组,指类内其它成员函数封装某一个特定行为的做法。

6.5      成员函数和方法参数标准

6.5.1        命名参数

参数命名遵循与局部变量命名完全一样的约定。

6.5.2        注释参数

成员函数的参数在采用 javadoc @param 标识的头文件中注释。应说明:

?        参数用来做什么。需要注释出参数用来做什么,以便其他开发者了解使用参数的上下文。

?        任何约束或前提条件。 如果一个参数的值域不能被成员函数接收,则应让调用者知道。可能一个成员函数只接收正数,或者字符数小于五的字符串。

?        示例。如果应传递什么样的参数不明显,那么应该在注释中给出一个或多个例子。

?         采用参数类型接口。若合适的话,不要只说明参数类型属于哪一类,如 Object,而应说明属于哪个接口,例如 Runnable。这样的好处是,这种有赖于环境的方法更具体 Runnable Object 更具体),或者在支持多态性(不坚持一个参数是一个类的层次结构中某个类的实例,而说明它支持一个特定的接口,这意味着它只用多态地适应你的需要即可)上是一个更好的方法。

6.6      注释成员函数和方法

如何注释一个成员函数和方法常常成为判断函数和方法是否可被理解,进而可维护和可扩展的决定性因素。注释在源代码的前面,用来记录所有重要的有助于理解函数的信息。 这些信息包含但不仅仅局限于以下内容:

?        成员函数做什么以及它为什么做这个。通过给一个成员函数加注释,让别人更加容易判断他们是否可以复用代码。注释出函数为什么做这个可以让其他人更容易将你的代码放到程序的上下文中去。也使其他人更容易判断是否应该对你的某一段代码加以修改(有可能他要做的修改与你最初为什么要写这一段代码是相互冲突的)。

?        哪些参数必须传递给一个成员函数。还必须说明,如果带参数,那么什么样的参数必须传给成员函数,以及成员函数将怎样使用它们。这个信息使其他程序员了解应将怎样的信息传递给一个成员函数。在 ( 2.7.4 快速浏览 javadoc”) 中讨论的 javadoc @param标识便用于该目的。

?        成员函数返回什么。如果成员函数有返回值,则应注释出来,这样可以使其他程序员正确地使用返回值/对象。在 ( 2.7.4快速浏览 javadoc”) 里讨论的 javadoc @return 标识便用于此目的。

?        已知的问题。成员函数中的任何突出的问题都应说明,以便让其他程序开发者了解该成员函数的弱点和难点。如果在一个类的多个成员函数中都存在着同样的问题,那么这个问题应该写在类的说明里。

?        任何由某个成员函数抛出的异常。应说明成员函数抛出的所有异常,以便使其他程序员明白他们的代码应该捕获些什么。在 ( 2.7.4快速浏览 javadoc”) 中讨论的 javadoc@exception 标识便用于此目的。

?        可见性决策。如果你觉得你对于一个成员函数可见性的选择会遭到别人的质疑,例如可能你将一个成员函数设为公共的,但是却没有任何对象调用该成员函数,那么应说明你的决定。这将帮助其他开发者了解你的想法,使他们不必浪费时间操心考虑你为什么要选择一种有疑问的东西。

?        成员函数是如何改变对象的。若一个成员函数修改了一个对象,例如一个银行帐户的成员函数 withdraw() 修改了帐户余额,那么就需要说明。 这种信息必须给出,使其他 Java程序员能准确地知道一个成员函数调用将如何影响目标对象。

?        避免使用含有信息的函数头。比如说作者、电话、创建和修改日期、单元(或者文件名)的位置,因为这些信息很快就会过时。将版权所有者信息放到单元的最后。例如,读者不会想要翻过两三页诸如版权所有等对理解程序毫无帮助且(或)不提供任何编程信息的文本。避免使用垂直滚动条或者关闭的文本框或对话框,这些东西只会增加视觉干扰,而且较难保持一致。采用一个配置管理工具来保存单元历史。

?        如何在适当情况下调用成员函数的例子。最简单的确定一段代码如何工作的方法是看一个例子。考虑包含一到两个如何调用成员函数的例子。

?        可用的前提条件和后置条件 前提条件是指一个成员函数可正确运行的限制条件;后置条件是指一个成员函数执行完以后的属性或声明。前提条件和后置条件以多种方式说明了在编写成员函数过程中所做的假设,精确定义了一个成员函数的应用范围。

?        所有并行事件。对众多程序开发者来说,并行性是一个新而复杂的概念;对有经验的并行性程序开发者来说,并行性也是一个老但却复杂的课题。最终结果是,如果应用了 Java 的并行编程特性,那么应在程序中详细地将其注释出来。当一个类既包含了同步也包含了非同步的成员函数时,必须注释出成员函数依赖的执行上下文,尤其是当函数可被无约束访问时。这样可以让其他开发者安全地使用你的成员函数。当一个采用了 Runnable 接口的类的设置函数(即可更新一个字段的成员函数)没有同步时,应说明这样做的理由。 最后,如果覆盖或重载一个成员函数,并且修改了它的同步性时,也应说明理由。

在注释中增加如下标签。

l         @param paramName description.

l         @return description of return value

l         @exception exceptionName description

l         @see string

l         @see URL

l         @see classname#methodname

:

 /**

  * Insert element at front of the sequence

  *    

  * @param element the element to add

  * @return condition:

  * <PRE>

  *  size() == PREV(this).size()+1 &&

  *  at(0).equals(element) &&

  *  foreach (int i in 1..size()-1) at(i).equals(PREV(this).at(i-1))

  * </PRE>

  */

 public void  addFirst(Object element);

本文链接:领悟书生教程网,转自ajava.org

相关问答

更多
  • 对于GCC,正确的宏是__cpp_concepts : #ifdef __cpp_concepts static_assert(false, "Concepts TS found"); #endif 据此,在最近的草案中改变了宏的名称。 正确的名称来自GCC支持页面 (感谢Jonathan Wakely ),但链接的草稿 (2015-02-09)仍然需要__cpp_experimental_concepts (这很奇怪......)。 但是,在最近的草案 (2015-09-25)中,名称实际上已更改为__ ...
  • 好吧,这很傻,但我只想出来了。 您无需为调试模式设置任何内容。 显然在6.1中已经确定了。 要在适配器中开始调试Java代码,您需要执行以下操作: 为“远程Java应用程序”创建调试配置。 将项目设置为worklight混合项目 我将端口设置为10777.这是jdwp在worklight服务器的jvm.options文件中设置的内容。 单击该配置的debug后,它将允许您调试适配器。 如果在Servers视图中展开Worklight Development Server定义,则可以看到jvm.options ...
  • 它使用ExtJS的v3.4.0 ,在其上构建AEM小部件库。 您可以在/libs/cq/ui/widgets/source/ext/release-notes.html找到详细信息。 以下注释也可在https://docs.adobe.com/docs/en/aem/6-1/develop/components/widgets.html上获得。 Adobe Experience Manager基于ExtJS 3.4.0构建。 It uses v3.4.0 of ExtJS on top of which t ...
  • Sitecore 6.6使用Lucene 2.9 。 下面的代码是您的代码更新以支持Lucene的较新版本。 有两个主要变化: Search方法使用2个附加参数(设置为null和maxDocs被设置为int.MaxValue )执行。 SearchHits构造函数将IndexReader实例作为第二个参数。 下面的代码应该和你期望的完全一样。 using (Sitecore.Search.IndexSearchContext context = searchIndex.CreateSearchContext ...
  • 事实证明,XCode 6.1对故事板布局施加了更严格的约束( 不确定它是否是错误或功能 )。 以下是对我有用的步骤。 故事板视图 约束 UIImageView内容模式 在XCode 6.1之前,我对UIImageView没有任何特定的限制。 使用XCode 6.1,看起来约束不再是可选的。 Turns out XCode 6.1 imposes more strict constraints on the storyboard layout (not sure whether it is a bug or ...
  • 我可以想到两种可能的解决方案: 取空6.5数据库,并使用一些数据库比较工具将它们与空6.6数据库进行比较。 通过这种方式,您可以查看6.6中的更改并创建自己的数据库更新脚本 制作6.5数据库的Sitecore包,包括您创建的内容,布局,模板,并在6.6环境中安装它。 这对我以前的版本有用,所以也可以在这里工作。 Sitecore 6.6 has now been released and upgrade information is available on SDN here
  • @Blckknght是对的,有一个名为“IO”(!!!大写!!!)的代码模块隐藏了内置的“io” 我的“本地”MacOS FS不区分大小写,但保留大小写,它区分io和IO,这就是为什么我在本地获得正确的“io”。 服务器具有区分大小写的FS Docker镜像具有不区分大小写的FS。 这就是它失败的原因。 这是一个很好的挑战,谢谢:) @Blckknght is right, there is a code module named "IO" (!!!uppercase!!!) that hides buil ...
  • 我发现了这个问题。 与pocoo点击没什么关系。 这是因为get_missing_records()函数实际上是另一个CLI命令。 missing参数随后也会传递给此函数, get_missing_records()方法显然对该参数一无所知。 所以全部解决了。 I found the issue. Was nothing much to do with pocoo click. It was because the get_missing_records() function is actually ano ...
  • 在iOS6中,自动旋转和方向更改已更改,因此我使用以下步骤解决了问题 1)您需要在FinishedLaunching上将根视图控制器分配给主应用程序窗口。 所以,如果以前像我一样,你在main.cs中的FinishedLaunching(UIApplication app)方法中有这个: window.AddSubview(mainVC.View); 替换为: window.RootViewController = mainVC; 2)替换这个: public override bool ShouldA ...
  • 从5.6版开始,SonarQube可帮助您专注于泄漏期,以保持新代码的清洁。 该硬币的另一面是,已经放弃了对其他差异期的访问。 你可以考虑行政设置的残余:由进化留下的无用的残余物。 他们将很快被删除。 Starting with version 5.6, SonarQube helps you focus on the Leak Period, to keep new code clean. The other side of that coin is that access to the other di ...