Java/编程规范

维基教科书,自由的教学读本

命名法[编辑]

对于变量、数组、方法/函数、类和对象,如何规范地进行命名至关重要,尤其是当程序规模扩大,变量数量激增的情况下。

比较著名的命名规则首推匈牙利命名法,这种命名方法是由Microsoft程序员查尔斯·西蒙尼(Charles Simonyi) 提出的,C语言中常用此种命名法。标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。例如:lpszStr, 表示指向一个以'\0'结尾的字符串(sz)的长指针(lp)变量。

“骆驼”(Camel)命名法,或者称“驼峰”命名法近年来越来越流行,在许多新的函数库和Java这样的平台下使用得当相多。其特点是第一个单词全部小写,以后的单词首字母大写,这样看起来就像骆驼的背一样,有高低起伏。

帕斯卡(Pascal)命名法与骆驼命名法类似。只不过骆驼命名法是第一个单词首字母小写,而帕斯卡命名法则是第一个单词首字母大写。

另一种流行的命名规则称为下划线命名法,即用下划线隔开每个单词。下划线法是随着C语言的出现流行起来的,在UNIX/LIUNX这样的环境,以及GNU代码中使用非常普遍。

出于很多原因,Java设计之初就采用驼峰命名法,而且绝大多数Java程序员也在他们的代码中遵循这一规范。

驼峰命名法有如下几种规范:

  • 采用有意义的英文单词或缩写不推荐使用拼音、无意义单词、单个字母、数字编号
  • 变量由多个英文单词构成,不间隔下划线、短横线、点号或者其他符号
  • 第一个单词全部小写,从第二个单词开始,首字母大写,以断开每个单词
  • 变量的单词应能够清晰、准确地表达此变量的意义作用

比如,现在我们需要用一个变量表示中国的人口,则可以取名为:populationOfChina。若表示河南省的国民生产总值gdpOfHenan,这里为了清晰表示,GDP使用小写。有时甚至可以是一句话:IfTheInternetIsAccessible来表示网络可达状态的布尔变量。

代码书写[编辑]

良好的代码书写习惯可以增强代码可读性。在团队开发过程中,代码书写规范的一致性是有效交流协作的前提。

缩进与换行[编辑]

缩进与换行可以增强代码的可读性。 缩进的原则:

  • 如果前一行是左大括号(“花括号”{),一般这一行就要相对括号的位置缩进一个单位。
  • 如果前一行为if,for,while、else、do,而下一行不是花括号,则下一行必须缩进。
  • 缩进使用Tab键(位于键盘上Q的左侧),而不应使用空格。这样不仅便利,而且可以达到距离的统一,空格的数目难以控制,且无法被编辑器识别为缩进。

换行的原则:

  • 在分号之后换行
  • 在表示结构块的大括号之后换行:{ 换行 换行 } 换行
  • if,for,while、else、do之后换行

空格[编辑]

空格的使用可以使一个语句看起来不那么拥挤,各个变量符号能够清晰分辨。

空格的使用方法不一,以下方式仅供参考:

  • 在=,+,-,*,/,前后各一个空格,数字前后应有一个空格,如:
int a = 10 + b;
  • 在小括号内侧使用一个空格,如:
while( i = 1 )

空行[编辑]

空行起到划分区域的作用,这使代码阅读起来更加容易,能够一眼看出代码由哪几个部分组成。

括号[编辑]

括号对于代码书写的正确性至关重要。为确保括号成对不至于缺失,可以采用下面的方法: 方法一:每次书写括号时同时写下一对括号,这样就不存在忘记写末尾括号的问题了。 方法二:使用IDE的括号匹配和自动完成功能,在Eclipse中,只要写下一个括号,程序就能自动补全另一半,非常便利。

注释[编辑]

注释能够帮助程序被更好的理解,因此清晰、简洁、明白的注释是良好代码风格的体现。

注释传达的信息包括:

  • 开头介绍代码的作者、日期、版本
  • 介绍各部分各自的作用
  • 介绍解决问题的过程

Java的注释方法有两种,皆继承自C++。

第一种是行注释,C++采用的注释方法,用两个斜杠来表示后面的内容一直到行尾都是注释内容。

//注释可以放在文档的开头
//每一行的开头都要有双斜杠

public class Wikibooks{
	//也可以放在代码中间
	public static void main(String args[]){			//可以放在行末
		System.out.println("Hellow Wikibooks!");	//用Tab保持对齐
	}
}

有很多原因使这种注释方法看起来更加“现代”:它容易输入,且不容易出错。

第二种是区域注释,C语言采用的注释方法,/*与*/中间的内容将作为注释,当无法配对时,*/被看作非注释,而/*以后的全部内容则被看作注释。

/*******************
 *通常人们在文档开头   *
 *做一个注释         *
 *******************/

public class Wikibooks{
	/*也可以放在代码中间*/
	public static void main(String args[]){			/*可以放在行末*/
		System.out.println("Hellow Wikibooks!");	/*用Tab保持对齐*/
	}
}

这种注释的缺点之一在于当你不小心只删除了一对注释符号中的一边,就有可能产生错误。另外,输入也很麻烦。