Java代码规范

来源:互联网 发布:淘宝手机散热器有用吗 编辑:程序博客网 时间:2024/05/29 11:30

一、命名及注释的规范

1、命名的规范

▪能够准确的表述其含义。

▪不同的领域使用不同的专业术语。

▪使用词组使变量易读。

▪使用缩写。

▪避免太长的名字,小于15个字符为佳。

▪避免类似或不一致的名字。

2、注释的规范

注释类型适用范围使用例子文件注释
(以/**开始以*/结束)
用来对接口、类、成员函数、域进行解释/**
*Customer- a *person or *organizaion
*/
语句块注释
(以/*开始以*/结束)
用来注释掉那些不用的代码/*
This code was commented out by Sarin
*/
单行注释
(以//开始的一整行)
在成员函数内部用来说明一些业务逻辑、代码片段以及解释一些临时变量//if the amount   is greater
//than 10 multiply by 100

3、修改注释的规范

之前加://modified ( added、deleted) by *** for *** begin;

之后加://modified (added、deleted)by *** for *** end。

如果对于同一个功能,需要添加多处代码则在以上的注释后面跟数字表示第几处。

例如://modified by *** for *** begin 0001。

二、成员函数的规范

1、成员函数的命名规范

▪以动词开头,后面单词首字母大写。

例如:openAccount();

▪Getters,如果返回类型为非boolean/Boolean,则以get为前缀;否则就以is、has、can为前缀。

例如:getFirstName();isPersistent();

▪Setters,以set为前缀。

例如:setFirstName(xxx);

▪参数,以a为前缀

2、成员函数的权限设置

为减少类与类之间的耦合关系,应尽可能的把成员函数的权限设置得高一些。

3、成员函数的注释

成员函数的声明需要包含:

▪此成员函数所要完成的功能及原因。

▪参数。

▪返回值。

▪已知的bugs。

▪抛出的异常。

▪访问权限。

▪对对象造成的影响。

▪对代码修改的历史记录。

▪如何引用该成员函数的例子。

▪所有同时发生的问题都应该注释。

▪方法在什么情况下可用。

▪如果方法定义为synchronized方法,就必须通过注释解释为什么此方法要同步。

▪在实现了Runnable这个接口的类中,如果一个成员方法更新了一个全局变量、域、属性,且该方法不是synchronized的,则需要通过注释说明原因。

▪如果一个成员函数被重载、复写、或者同步化时,应该添加注释声明。

例如:

<span style="font-size:14px;">/**  *This method is the last chance for the focused view and its ancestors to responed to an arrow key.This is called when the focused view did not consume  *the key internally,nor could the view system find a new view in the requested direction to give focus to.  *  *@param focused The currently focused view.  *@param direction The direction focus wants to move.One of FOCUS_UP,FOCUS_DOWN,FOCUS_LEFT,FOCUS_RIGHT.  *@return Ture if the this view consumed this unhandled move.*/public bollean dispatchUnhandledMove(View focused,int direction){<span style="white-space:pre"></span>return false;}</span>
4、方法内部的注释

要注释的有一下几点:

▪控制模块(包括比较语句和循环结构)。

▪代码块做了些什么或者为什么这么做。

▪局部变量。

▪比较复杂的逻辑块。

▪执行顺序(如果代码中有语句必须在特定的顺序下执行)

▪对于有多个分支的代码块,注释最近的一个分支。

三、域及局部变量的规范

1、域的命名及初始化

▪静态域以s开头,声明时必须初始化。

例如:static int sName = "Henry";

▪非public域以m开头。

例如:mFirstName

▪public域命名与局部变量相同:首字母小写,第二个字母大写。

▪使用名词复数形式来命名集合类的域。

例如:mOrderItems

▪常量:单词大写,下划线分隔。

例如:MAX_VALUE

2、域的访问权限及Getter/Setter

▪所有的域都应该定义为private的,它们的访问及修改只允许通过Getter/Setter方法。

▪Getter/Setter函数的作用不仅仅只有get或set域的值,它应该也被用于初始化域值。

▪访问常量时,最好也使用Getter方法。

▪Getter设置为public,Setter限制为protected。

3、局部变量的命名

▪首字母小写,第二个及以后单词首字母大写。

例如:int myName = "Henry"

▪输入流需加前缀in,输出流需加前缀out。

例如:inFile;outFile;

▪Loop Counter命名使用“loopCount”或“counter”,避免使用“i”、"j"。

▪使用e来命名一个generic的exception。

4、局部变量的声明及注释

▪一行只声明一个变量。

▪使用“//”来对局部变量进行注释。

▪在变量使用前再去声明,以缩短它的作用域。

▪局部变量只能在一次运算中使用。

▪循环控制变量必须在for语句中声明。

5、控件的命名

▪使用【描述词】+【控件类型】来对控件命名。

例如:mOKButton;customerList;

▪常见的错误如下:

①只使用控件类型对其命名。

②只使用控件的功能对其命名。

例如:mButton、mGallery、mAccountLimit

▪控件的缩写:

控件缩写ButtonBtn       TextViewTvEditTextEtImageViewIvProgressBarPbListViewLvAutoCompleteTextViewActvMutiAutoCompleteTextViewMactvDialogDlgAlterDialogAdExpandableListViewElv

四、类、接口及包的规范

1、类的规范

▪内部使用Package的访问权限,对外开发的使用public权限。

▪每个单词的首字母都要大写。

▪对以下内容进行注释:

①编写此类的目的。

②已知的bugs。

③类的主要修改记录。

④任何实现了Runnable接口的类都必须详细的注释此类的并发策略。

▪类的注释前与import之间需要空两行。

2、全局变量及方法的顺序

全局变量和方法的顺序应该是这样的:

①private的全局变量(static的排在非static的前面)

②构造函数

③public的成员函数

④protected的成员函数

⑤private的成员函数

⑥Finalize()

3、接口的规范

▪与类命名相似,需要加上“I”或“Ifc”的前缀。

例如: interface IStoring;
▪对以下内容进行注释:

①编写此接口的主要目的。

②此接口应该以及不应该如何被使用。

4、包的规范

▪小写的单词或单词的组合。

例如: com.user.android

▪对以下内容进行注释:

①包的原理。

②包内包含的所有类。

五、编译单元的规范

1、文件头的注释

<span style="font-size:14px;">/***Classname**Version information**Date**Copyright notice*/</span>
文件头注释后需要空两行。

2、缩进

4个空格是一个缩进单元,也可以8个空格缩进。

<span style="font-size:14px;">//DON'T USE THIS INDENTATIONif((condition1 && condition2)    ||(condition3 && condition4)    ||!(condition5 && condition6)){//<strong>BAD WRAPS</strong>    doSomethingAboutlt();//<strong>使这一行非常容易被遗漏</strong>}//USE THIS INDENTATION INSTEADif((condition1 && condition2)        ||(condition3 && condition4)        ||!(condition5 && condition6)){//<strong>BAD WRAPS</strong>    doSomethingAboutlt();//<strong>这样就容易被看见</strong>}</span>
3、行长

▪行长应该避免超过100个字符。

▪注释语句一般不超过70个字符。

4、断行

▪逗号之后断行。

▪在运算符前断行。

▪相对于低优先级的断行高优先级的更好。

▪断行后最好保证新的一行优先级同上一行一样。

▪如果上述的原则导致代码不易读时,需要采用8个空格的缩进。
例如:

<span style="font-size:14px;">longName1 = longName2*(longName3+longName4-longName5)            +4*longName6;//PREFERlongName1 = longName2*(longName3+longName4            -longName5) +4*longName6;//<strong>AVOID</strong>Instrument i = someLongExpression(that,          WouldNotFit,on,one,line);//<strong>PREFER</strong>Instrument i = someLongExpression(that,     WouldNotFit,on,one,line);//<strong>AVOID</strong></span>
5、声明及初始化

正确的:

<span style="font-size:14px;">int level;//indentation levelint size;//size of table</span>
错误的:

<span style="font-size:14px;">int level,size;//WRONG!</span>
更不能在同一行定义两个不同类型的变量:

<span style="font-size:14px;">int foo, fooarray[];//WRONG!</span>
尽量在变量声明时对其初始化。

6、类和接口的声明

▪在方法名和左括号“(”间没有空格。

▪“{”放在声明同行的最后,前面要加空格。

▪“}”独自一行,且缩进要保持与“{”所在行同样。除非“{”和“}”之间没有任何语句,才可以将它们放在同一行。

例如:

<span style="font-size:14px;">class Sample extends Object {       Sample(int i,int j) {               ivar1 = i;               ivar2 = j;         }          int emptyMethod() {}}</span>
7、简单、复合及Return语句

▪一行只能有一条语句。

例如:

<span style="font-size:14px;">argv++;//correctargv++;argc--;//<strong>AVOID!</strong></span>

▪大括号内的语句要比大括号外的缩进至少一级。

▪即使大括号内只有一条语句也要用大括号括起来。

▪Return语句中一般不使用括号

例如:

<span style="font-size:14px;">return myDisk.size();return (size ? size : defaultSize);</span>
8、if、if else、if else-if else语句

if(condition){
       statements;
}
if(condition){
          statements;
}else{
   statements;
}
if(condition){
    statements;
}else if(condition){
statements;
}else{
statements;
}


if语句即使只有一条语句也要用大括号括起来。

例如:

<span style="font-size:14px;">if(condition)   statements;//<strong>AVOID!</strong>if(condition){    statements;}//OK</span>

9、for语句

<span style="font-size:14px;">for(initialization;condition;update){     statements;}for(initialization;condition;update);</span>
10、while、do while语句

<span style="font-size:14px;">while(condition){statements;}while(condition);do{    statements;}while(condition);</span>
11、switch语句

<span style="font-size:14px;">switch(condition){    case ABC:        statements;        /*falls through*/    case DEF:         statements;         break;    default:         statements;         break;}</span>
12、try catch语句

<span style="font-size:14px;">try{    statements;}catch(ExceptionClass c){     statements;}finally{     statements;}</span>
13、空行

▪双空行:

①类与类之间。

②类与接口之间。

③方法之间。

▪单空行:

①方法内局部变量与第一行语句间。

②在一个代码块或单行语句前。

③方法内部不同的逻辑块之间。

14、空格

▪关键字与其之后的“(”需要用空格隔开。

▪函数的参数列表中,逗号后需要跟一个空格。

▪所有的二元运算的运算符与其它运算数之间都应该用空格隔开。

▪for语句中的表达式间也应该用空格隔开。

▪强制类型转换后需要跟一个空格。

15、其它规范

▪Exception:不管是catch还是ignore都要对其进行说明。不能捕捉generic的Ecception。

▪Import的时候要import全名。顺序应该是Android、第三方、java(x)。

▪不要编写过于庞大的方法,一般小于60行。

▪TODO后面要跟详细的需要做的事情的描述。

▪一般只在非常必要的时候才会打出来。









1 0
原创粉丝点击