`
liuwei1981
  • 浏览: 752578 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:156167
社区版块
存档分类
最新评论

Java语言编码惯例

 
阅读更多

这里说说Java语言编码惯例。

 

任何一种语言都有其规范惯例。比如以前汉语都是从左到右,从上到下的书写,现在是从左到右,从上到下的书写,每段前空开两个字符表示一段文字的开始等等。

 

说道编程语言,本质上也是语言的一种,有词组(关键字)、语法、语义,为了让计算机能够读懂高级编程语言的源代码,必须进行编译。但是一定要明白的是,源代码首先是供人阅读的。所以,排版规范,结构清晰的源代码,阅读起来可以说是一种享受。

 

特别是现在的软件系统的规模,都是一些大型软件,是多人合作开发的,还有后续的运行维护。

 

我们想象一下,在一个大型的项目中,如果每个程序员在给包、类、变量、方法取名的时候,如果根本没有一点约定,只是随心所欲,可能会带来那些问题?

1.程序可读性极差;
2.在相互有交互的程序中,给其他程序员理解程序带来很大的麻烦;
3.对于测试员来说,在测试中如果需要检查源程序,将会感到无从下手;
4.在后续的维护中,可能因为程序根本没法看懂,而不得不重新编写一个新的程序。

 

第四点可以说是最糟糕的结局了。本已完成用户要求功能,并通过测试,可以正常运行的代码,因为其混乱的编码规范,直接被抛弃另起炉灶,凭空增加了维护的工作量。这种情况我还真遇到过,用户提出需求变更修改,我拿到很早以前的代码,发现那段逻辑代码,从命名到逻辑都无从下手,根本不符合整体项目框架的开发规范要求,只能重新写一个新函数(这还得在准确理解需求和整体框架平台开发技术基础上)。不过没办法,时间紧张,与其去读那段天书一般的代码,还不如直接重新来写来得快。

 

当然重新写的时候,就得小心点,照顾到以后维护的人的感受了,从命名规范,到排版逻辑处理,都严格遵守项目框架的技术要求。

 

这样说起来,程序设计的标准化非常重要,原因在于这能提高开发团队各成员的代码的一致性,使代码更易理解,这意味着更易于开发和维护,从而降低了软件开发的总成本。

 

为实现此目的,和其它语言类似,Java语言也存在非强制性的编码惯例。虽说这个惯例是非强制的,但是基本上绝大多数的Java程序员都接受了这个惯例。听过这样的故事(真实性尚未考证),在谷歌内部,基本上应用到的编程语言都有一套自己的编码规范,但是Java没有,而是沿用了这套惯例。说明这套惯例还是有其优势和合理性的。

 

1.命名规范

 

命名惯例也称命名约定,在声明包名、类名、接口名、方法名、变量名、常量名时除必须符合标识符命名规则外,还应尽量体现各自描述的事物,或属性,功能等,例如可定义类Student描述学生信息。一般性命名约定:


 尽量使用完整的英文单词或确有通用性的英文缩写;
 尽量采用所涉及领域的通用或专业术语;
 词组中采用大小写混合使之更易于识别;
 避免使用过长的标识符(一般小于15个字母);
 避免使用类似的标识符,或者仅仅是大小写不同。


具体命名惯例如下:


 包名应为名词或名词性短语,全部小写,例如: package cn.edu.tsinghua;
 类名应为名词或名词性短语,各单词首字母大写,例如:class TestStudent;
 接口命名规则同类名,例如:interface Person;
 方法名应为动词或动宾短语,首字母小写,其余各单词首字母大写,例如:getName(){…}、deleteUser(){}等;
 用于设置属性值的方法应命名为setXxx(),其中Xxx为相应属性名,且属性名的首字母大写,例如:setAge(int _age){this.age = _age;};
 用于获取属性值的方法应命名为getXxx(),其中Xxx为相应属性名,且属性名的首字母大写,例如:getAge(){return this.age;};
 变量名应为名词或名词性短语,首字母小写,其余各单词首字母大写: currentCustomer
 常量名全部大写,为名词或名词性短语,多个单词间用‘_’分隔:HEAD_COUNT,MAXIMUM_SIZE

 

2.缩进

 

缩进应该是每行2个或4个空格。 不要在源文件中保存Tab字符, 在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度。

 

3.页宽

 

页宽应该设置为80字符。 源代码一般不会超过这个宽度,并导致无法完整显示, 但这一设置也可以灵活调整,特别是现在的显示器愈来愈大了。在任何情况下,超长的语句应该在一个逗号或者一个操作符后折行。 一条语句折行后, 应该比原来的语句再缩进2个或4个字符。

 

4.{}对

 

一般来说,{}应该单独用做一行。{的位置,可以跟在之前的语句之后,也可另起一行。不过大部分的Java语言都是跟在之前的语句之后,c语言的习惯是另起一行。

 

5.括号

 

左括号和后一个字符之间不应该出现空格,同样,右括号和前一个字符之间也不应该出现空格。

 

不要在语句中使用无意义的括号。 括号只应该为达到某种目的而出现在源代码中。

 

6.其他

 

在程序的关键方法和关键算法上使用注释,在类定义、方法、变量之前使用javadoc定义,以方便生成API文档。
在运算符与运算数间用空格间隔

 

不过这些惯例,除了第一条命名管理之外,其他的排版规格都不必专门来记。现在主流的IDE都根据Java这套编码惯例提供代码格式化模版,可以很方便的格式化你的源代码。只需执行一个命令,你的代码排版就变漂亮了。

 

至于第一条,在以后的编码实践中,前期只要严格来照着做,以后养成习惯就好了。并且IDE都会对不符合规范的命名提出警告提示的。


 

 

 

 

 

分享到:
评论

相关推荐

    Java语言编码规范

    Java语言编码规范 1 介绍(INTRODUCTION) 3 1.1 为什么要有编码规范(WHY HAVE CODE CONVENTIONS) 3 1.2 版权声明(ACKNOWLEDGMENTS) 3 2 文件名(FILE NAMES) 4 2.1 文件后缀(FILE SUFFIXES) 4 2.2 常用文件名(COMMON ...

    java语言编码规范

    既有Java的编码规范又有Java编程惯例,非常详细,绝对让你编出的程序像个艺术品.

    Java语言编码规范[含书签]

    1.1 为什么要有编码规范 ? 1.2 版权声明 2 文件名 ? 2.1 文件后缀 ? 2.2 常用文件名 3 文件组织 ? 3.1 Java源文件 o 3.1.1 开头注释 o 3.1.2 包和引入语句 o 3.1.3 类和接口...

    Java语言编码规范(Java Code Conventions) txt版

    1 介绍(Introduction) 2 文件名(File Names) 3 文件组织(File Organization) 4 缩进排版(Indentation) ...10 编程惯例(Programming Practices) 11 代码范例(Code Examples) 花点时间看看这个,让你的代码更清晰可读。

    cscs:编码风格惯例和标准的精选清单

    Clojure -Clojure编程语言的社区编码样式指南。普通口齿不清。 。d 。镖。长生不老药的社区驱动样式指南。埃尔朗-Inaka的Erlang编码指南。 。F# 。 。Fortran 。去。哈斯克尔。 -描述我喜欢如何编写Haskell代码的...

    Javva The Chatt-开源

    IRC客户端以Java编码,受到流行的mIRC的启发。 该客户端与我对Java编程语言的学习一起被编码为一种惯例。 我想提供代码,以帮助希望在Java上开始对网络应用程序进行编程的任何人。

    MySQL5.1参考手册官方简体中文版

    1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库...

    mysql5.1中文手册

    本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性...

    mysql官方中文参考手册

    1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库...

    MYSQL中文手册

    1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB...

    MySQL 5.1参考手册中文版

    1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB...

    MySQL 5.1参考手册

    1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库...

Global site tag (gtag.js) - Google Analytics