您好,欢迎来到九壹网。
搜索
您的当前位置:首页Java编码规范

Java编码规范

来源:九壹网


Java编码规范

目录

目录 .................................................................................................................................................. 2 1.编码规范的重要性 ........................................................................................................................ 3 2. Java源文件结构 ........................................................................................................................... 3

2.1开头注释............................................................................................................................. 3 2.2 包和引入............................................................................................................................ 3 3. 缩进排版...................................................................................................................................... 4

3.1 缩进长度............................................................................................................................ 4 3.2 行长度................................................................................................................................ 4 3.3 换行 ................................................................................................................................... 4 3.4 方法声明缩进 .................................................................................................................... 4 3.5 if语句换行.......................................................................................................................... 5 3.6三元运算表达式缩进 ......................................................................................................... 5 4. 注释 ............................................................................................................................................. 5

4.1 有效的注释 ........................................................................................................................ 5 4.2 注释的方式 ........................................................................................................................ 6 4.3 实现注释的使用 ................................................................................................................ 6 5. 空白 ............................................................................................................................................. 6

5.1 空行 ................................................................................................................................... 6 5.2 空格 ................................................................................................................................... 7 6. 命名规范...................................................................................................................................... 7

6.1包名 .................................................................................................................................... 7 6.2类名和接口名 ..................................................................................................................... 8 6.3方法名................................................................................................................................. 8 6.4存取性方法名 ..................................................................................................................... 8 6.5属性名................................................................................................................................. 8 6.6变量名................................................................................................................................. 8 6.7一些建议............................................................................................................................. 9 7. 声明 ............................................................................................................................................. 9 8. 表达式与语句 .............................................................................................................................. 9 9. 类和接口...................................................................................................................................... 9 10. 编程习惯............................................................................................................................... 10

1.编码规范的重要性

 编码规范可以改善软件的可读性,可以让程序员尽快理解新代码。

 几乎没有任何一个软件,在其整个生命同期中,均由最初的开发人员来维护。  一个合格的软件,生命周期中80%的花费在于维护。

2. Java源文件结构

2.1开头注释

所有的源文件都应该在开头有一个C语言风格的注释,其中列出类名、版本信息,创建日期和版权声明:

/ * *类名 *

*版本信息 *

*创建日期 *

*版权声明 * /

2.2 包和引入

 先写包语句,再写引入语句。

 package行和import行之间留一行空行。

 引入的标准包名要在本地包名之前,并且包名按照字母顺序排列。  如果 import 行中包含了同一个包中的类超过5个,则用 * 来处理。  import的标准包和本地包之间留一行空行。 示例:

package com.xinma.common;

import java.io.*;

import java.sql.DatabaseMetaData; import java.sql.ResultSet;

import com.xinma.plan.BaseDao;

import com.xinma.plan.dao.SysEquipmentDao;

3. 缩进排版

3.1 缩进长度

缩进一般采用4个空格。注意:一定要使用空格键。这样可以避免使用不同的编辑器阅读程序时,因TAB键所设置的空格数目不同而造成程序布局不整齐。

3.2 行长度

尽量避免一行长度超过80个字符,因为很多工具不能很好处理。

3.3 换行

当一个表达式无法在一行显示时,可依据如下规则断开:

 在一个逗号后面断开。

 在一个操作符前面断开。

 选择较高级别的断开,而非较低级别的断开。

 新的一行应该与上一行同一级别表达式的开头处对齐。

 如果以上规则导致你的代码混乱或者使你的代码都堆挤在右边,那就代之以缩进8个空

格。

示例:  

someMethod(longExpression1, longExpression2, longExpression3, var = someMethod1(Expression1,

longExpression4, longExpression5);

someMethod2(longExpression2, longExpression3));  

longName1 = longName2 * (longName3 + longName4- longNeme5 longName1 = longName2 * (longName3 + longName4 + 4 * longName6);

- longName5 + 4 * longName6);

3.4 方法声明缩进

someMethod(int anArg, Object anotherArg, String yetAnotherArg, Object andStillAnother) { …… }

下面这种这种情况下,如果使用常规的缩进方式将会使第二行和第三行移得很靠右,所以代之以缩进8个空格。

private static synchronized horkingLongMethodName(int anArg, …… }

Object anotherArg, String yetAnotherArg, Object andStillAnother) {

3.5 if语句换行

if语句的换行通常使用8个空格的规则,因为常规缩进(4个空格)会使语句看起来比较费劲。 常规缩进方式:

if ((condition1 && condition2)

}

缩进八个空格:

if ((condition1 && condition2)

|| (condition3 && condition4) || !(condition5 && condition6)) { || (condition3 && condition4) || !(condition5 && condition6)) { doSomethingAboutIt();

}

doSomethingAboutIt();

3.6三元运算表达式缩进

 alpha = (aLongBooleanExpression) ? beta : gamma;  alpha = (aLongBooleanExpression) ? beta : gamma;

 alpha = (aLongBooleanExpression) ? beta : gamma;

4. 注释

4.1 有效的注释

注释有助于理解代码,有效的注释是指在代码的功能、意图层次上进行注释,提供有用、额外的信息,而不是代码表面意义的简单重复。

4.2 注释的方式

 实现注释: ① ② ① ②

// 注释内容 /* 注释内容 */ /** 注释内容 */ / *

 文档型注释:

* * /

一般类公共变量的声明采用实现注释。类、接口、构造函数、方法等的声明采用文档型注释。 文档型注释参考资料:http://java.sun.com/javadoc/writingdoccomments/index.html

4.3 实现注释的使用

            

公共方法前面应进行文档型注释。 类、接口头部必须进行注释。 注释与所描述内容进行同样的缩进。

包含在{ }中的代码块,结束处要加注释,便于阅读。特别是多分支、多重嵌套的条件语句或循环语句。

对分支语句(条件分支、循环语句等)必须编写注释。 方法内部的块注释位于所描述内容之前。 单行注释位于所描述内容之前。 块注释和单行注释之前保留一行空行。 对类和方法做出较大改变时必须添加注释。 注释不能在一行写完时,采用块注释。 对变量或常量的简短注释在代码右端。 代码和尾端注释之间留有足够多的空白。

频繁的注释有时能反映出代码的质量低。当你觉得被迫要加注释的时候,考虑一下重写代码使其更清晰。

5. 空白

5.1 空行

下列情况应该总是使用一个空行: ◆ 两个方法之间。

◆ 方法内的局部变量和方法的第一条语句之间。 ◆ 块注释或单行注释之前。

◆ 一个方法内的两个逻辑段之间,用以提高可读性。

5.2 空格

下列情况应该使用空格:

◆ 一个紧跟着括号的关键字应该被空格分开,例如: while (true) { …. }

注意:空格不应该置于方法名与其左括号之间,这将有助于区分关键字和方法调用。

◆ 空白应该位于参数列表中逗号的后面。

◆ 所有的二元运算符,除了“.”,应该使用空格将之与操作数分开。一元操作符和操作数之间不应该加空格,比如:负号(“-”),自增(“++”)和自减(“--”)。例如:

a += c + d; a = (a + b) / (c * d);

while (d++ + s++) { n++; }

printSize(“size is ” + foo + “\\n”);

◆ for语句中的表达式应该被空格分开,例如: for (expr1; expr2; expr3)

◆ 强制转型后应该跟一个空格,例如:

myMethod((byte) aNum, (Object) x); myMethod((int) (cp + 5), ((int) (i + 3)) + 1);

6. 命名规范

好的命名规则能极大地增加可读性和可维护性。同时,对于一个多人共同完成的团队项目来说,统一命名约定也是一项必不可少的内容。可命名对象包括程序中的所有标识符(包、变量名、控件名、常量名、方法名、类名、接口等)。

常用命名规范:   

Camel规范: 第1个字符不大写,但目标名中的每个单词的第1个字母大写(比如:invoiceNumber),其他的所有字符都小写。

匈牙利规范:在目标名中加入表示类型的前缀,如strName。

Pascal规范:第1个字符大写,目标名中的每个单词的第1个字母也大写,比如InvoiceNumber或者PrintInvoice。其他的所有字符都小写。

6.1包名

 包名一般采用域名倒置加上自定义包名  包名全部采用小写字母  示例:

package com.xinma.crm.common package com.sun.eng

package com.apple.quicktime.v2 package edu.cmu.cs.bovik.cheese

6.2类名和接口名

   

采用大小写结合方式,每个单词的首字母大写 简洁而富于描述

使用完整单词,避免缩写词 示例:

CustomerList,LogManager

6.3方法名

   

方法名应当能体现方法的作用 Camel规范命名

一般使用“动词”或“动词+名词”格式 示例:

private void calculateRate(); public void addNewOrder();

6.4存取性方法名

 

采用getter和setter方法 示例:

public boolean isFinished();

public String getName();

public void setName(String name);

6.5属性名

   

采用意义完整的英文描述 Camel规范命名 不能和方法名相同 示例:

private customerName; private orderNumber();

6.6变量名

Camel规范命名

 

除一次性临时变量(如for循环变量)外,不能用单个字符的变量名,如:i,a 如果变量名代表容器(collection),如Array, Vector等,在变量名后加“List”

6.7一些建议

  

采用应用领域的术语来命名,不要生造

尽量避免名字中出现数字编号,如value1、value2等,除非逻辑上的确需要编号 程序中不要出现仅靠大小写区分的相似的标识符,如: getUserSql和getUserSQL

7. 声明

  

一行只声明一个变量

变量声明应该只放在代码段的开始部分。最好不要到使用时才声明变量 尽量在声明的同时初始化变量。除非初始值依赖于某些先前发生的计算

8. 表达式与语句

       

每一行应该只包括一个语句

在表达式中使用括号,使表达式的运算顺序更清晰

当复合语句作为控制流程的一部分时,应该用‘{ }’把所有的复合语句括起来,即使只有一句简单语句

不可将浮点变量用“==”或“!=”与任何数字比较,精确计算必须采用BigDecimal

switch语句中,每一个case分支一般情况下必须使用break结尾,如有特殊情况不使用break,需要注释说明。最后一个分支必须是default分支 循环嵌套次数不大于3次

在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨循环层的次数

不可在for 循环体内修改循环变量,防止for 循环失去控制

9. 类和接口

   

类内部的代码布局顺序:类变量、属性、构造函数、方法 功能相关的方法放在一起 嵌套内部类不能超过两层

一个接口可以有多个实现类,实现类共同的变量在接口里声明

10. 编程习惯

           

准确确定成员函数的存取控制符号,不是必须使用public的,请使用protected,不是必须使用protected的,请使用private

明确类的功能,精确地实现方法设计。一个方法仅完成一个功能。即使再简单的功能也应该编写单独的方法去实现

数据库、IO等操作中,需要使用close()结束的对象,必须在finally中close()

异常捕获后,如果不对异常进行处理,则应该记录日志或者ex.printStackTrace(),并注释说明处理原则

主动抛出的异常必须添加详细的描述信息,便于定位问题 避免使用不易理解的数字,用有意义的标识来替代

调试代码时,不要使用System.out和System.err进行输出,应该使用一个带有开关的测试类统一进行输出

集合中的数据如果不再使用应该及时释放,尤其是可 重复使用的集合 尽量避免使用goto语句

系统应具有一定的容错能力,对一些错误事件(如用户误操作等)能进行自动补救

在对字符串有较多附加操作时,使用StringBuffer而非String。使用StringBuffer性能会好很多 不要在循环内执行重复操作。可在循环外调用一次的,就避免在循环内进行不必要的反复调用。如:

for (int i = 0; i < dw.getRowCount(); i++) {

… } 应写成:

int rows = dw.getRowCount(); for (int i = 0; i … }

不要频繁初始化对象。除非必要,否则不要在循环内初始化对象。 如:

for (int i = 0; i … } 应写成:

PlanVO plan= new PlanVO(); for (int i = 0; i … }

尽量在合适的场合使用单例

使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例。简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控制资源的并发访问; 第二,控制实例的产生,以达到节约资源的目的;

第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。 

尽量使用移位来代替‘a/b’、'a*b'的操作

“/”是一个代价很高的操作,使用移位的操作将会更快和更有效。 如

int num = a / 4; 可改为:int num = a >> 2; int num = a * 8; 可改为:int num = a << 3;

注意:使用移位应添加注释。因为移位操作不直观,比较难理解,如果不加注释将导致代码可读

性降低     

尽量使用System.arraycopy ()代替通过来循环复制数组。System.arraycopy() 要比通过循环来复制数组快的多

尽量避免使用二维数组。二维数据占用的内存空间比一维数组多得多,大概10倍以上 尽量避免使用continue、break 不要混合使用递增运算符和递减运算符 不要使用do while语句,采用while语句来替代

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务