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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务