一、代码整体结构
1.1 package com.<公司名>.<应用程序名>.<包名>(com.opendate.swjaynw.config)
1.2 import java.* -> javax.* -> 中间件、库等提供的package -> 程序中的package
1.3 注释
class name
description
author
date
1.4 类名
静态常量 如无设计上的必要,规定把常量写在class中代替把常量写在interface中。
成员变量 在声明变量时应该给它付值。却省对象付值为null;整型、长型、浮点型等为0;布尔型为false。
初始化块(Static)是否使用static block应该在设计时决定。(对不变的初始化,如得到当天日期的代码)
构造方法
public method
protected method 包类型,只能在本包内可以访问
friend method 默认类型,本包及子类都可以访问的
private method 只能是本类可以访问的
1.5 方法
1.5.1 一个方法的注释中,包含这个方法的说明、参数说明、返回值说明、
例外说明和@since(或@deceprated)。规定,这几个部分在方法中存在的情况下,
必须给出相应的说明。例如,如果方法有返回值,则必须给出@return的说明。
1.5.2 方法内部的处理流程如下
方法的注解:
方法外面注解是 what
方法里面是why
//计算人口数
Public accountPersionNum(){
//因为HashMap的Key值不能为null
If(name==null) throws Exception();
}
1.5.3 参数列表、分号后面、一个紧跟在关键字(if for while)后面的括号后面、二元操作符(= + ==)、前后用空格
public void method(int a, int b)
for (int i = 0; int i < max; i++)
if () while ()
String name = "cdl" for (int i = 0; i < str.length; i++)
二、编码规范
2.1 类的编码规范
接口要基于类,开头加I
public Sample implements ISample{}
抽象类也要基于类,开头加Abstract
public Sample entends AbstractSample{}
实现接口的类加上 Impl
public SampleImpl
2.2 方法的编码规范
boolean 通过返回变量的Method名要能看出true/false的状态
推荐使用表示Yes或No的疑问句的描述形式(例:is+名片)。统一此写法,将提高代码的易读性。
isSleep()
hasValue()
2.3 变量和常量命名规范
变量命名的方法采用匈牙利命名法,基本结构为scope_typeVariableName,它使用3字符前缀来表示数据类型,3个字符的前缀必须小写,前缀后面是由表意性强的一个单词或多个单词组成的名字,而且每个单词的首写字母大写,其它字母小写,这样保证了对变量名能够进行正确的断句。例如,定义一个整形变量,用来记录文档数量:intDocCount,其中int表明数据类型,后面为表意的英文名,每个单词首字母大写。这样,在一个变量名就可以反映出变量类型和变量所存储的值的意义两方面内容,这使得代码语句可读性强、更加容易理解。byte、int、char、long、float、double、boolean和short。
变量类型和首字母对照关系如下表:
数据类型/对象类型 变量前缀 备注
byte bye
char chr
float flt
boolean bln 做布尔变量时,使用bln
Integer/int int
String str
Single sng
short sht
Long/long lng
Double/double dbl
Currency cur
Variant bln astr obj vnt 做布尔变量用时,用bln;
做字符串数组用时,用astr;
做为对象使用时,用obj
不确定时,用vnt。
对于数组,在数据类型的前缀前再增加一个a,例如字符串数组为astr。对于在多个函数内都要使用的全局变量,在前面再增加“g_”。例如一个全局的字符串变量:g_strUserInfo。
在变量命名时要注意以下几点:
1)选择有意义的名字,注意每个单词首字母要大写
2)在一段函数中不使用同一个变量表示前后意义不同的两个数值
3)i、j、k等只作为小型循环的循环索引变量
4)避免用Flag来命名状态变量
5)用Is来命名逻辑变量,如:blnFileIsFound。通过这种给布尔变量肯定形式的命名方式,使得其它开发人员能够更为清楚的理解布尔变量所代表的意义
6)如果需要的话,在变量最后附加计算限定词,如:curSalesSum
7)命名不相包含,curSales和curSalesSum
8)Static Final 变量的名字应该都大写,并且指出完整含义
9)如果需要对变量名进行缩写时,一定要注意整个代码中缩写规则的一致性。例如,如果在代码的某些区域中使用intCnt,而在另一些区域中又使用intCount,就会给代码增加不必要的复杂性。建议变量名中尽量不要出现缩写
10)通过在结尾处放置一个量词,就可创建更加统一的变量,它们更容易理解,也更容易搜索。例如,请使用strCustomerFirst和strCustomerLast,而不要使用strFirstCustomer和strLastCustomer。常用的量词后缀有:First(一组变量中的第一个)、Last(一组变量中的最后一个)、Next(一组变量中的下一个变量)、Prev(一组变量中的上一个)、Cur(一组变量中的当前变量)
11)为每个变量选择最佳的数据类型,这样即能减少对内存的需求量,加快代码的执行速度,又会降低出错的可能性。用于变量的数据类型可能会影响该变量进行计算所产生的结果。在这种情况下,编译器不会产生运行期错误,它只是迫使该值符合数据类型的要求。这类问题极难查找
12)尽量缩小变量的作用域。如果变量的作用域大于它应有的范围,变量可继续存在,并且在不再需要该变量后的很长时间内仍然占用资源。它们的主要问题是,任何类中的任何方法都能对它们进行修改,并且很难跟踪究竟是何处进行修改的。占用资源是作用域涉及的一个重要问题。对变量来说,尽量缩小作用域将会对应用程序的可靠性产生巨大的影响。
三:注意项
1. 不要在循环内生成对象
如果在循环内需要一个临时对象来保存数据,那么不要在循环内部来构造这个对象。取而代之,
可以在循环外部创建这个对象,并在循环中重复利用。这样做的原因是,对象的创建和销毁都需要耗费CPU和内存资源。
for (int i = 0; i < 10; i++){
TmpObject tmpObject = new TempObject(); //错误
tmpObject = (TempObject)someList.get(i);
// do something process
}
TmpObject tmpObject = new TempObject(); //正确
for (int i = 0; i < 10; i++){
tmpObject = (TempObject)someList.get(i);
// do something process
}
2.boolean变量特意与true进行比较了
while(booleanExp==true)
更改 while (booleanExp) return (booleanExp) if (booleanExp)
3. 不等号要向左("<"、"<=")
if(str.length() < 10){
if(i>a)
}
更改
if (str.length < 10){
if(a<i);
}
4. 数组声明形式为“类型名[]”
private int sampleArray[] = new int[10]; //错误
private int[] sampleArray = new int[10]; //正确