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
▪控件的缩写:
四、类、接口及包的规范
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后面要跟详细的需要做的事情的描述。
▪一般只在非常必要的时候才会打出来。
- 开发规范: JAVA代码规范
- java代码书写规范
- java开发代码规范
- JAVA代码编程规范
- Java代码编写规范
- Java代码规范
- Java代码规范
- Java代码注释规范
- java编程代码规范
- JAVA代码编写规范
- JAVA代码规范
- Java代码编写规范
- java代码规范
- java代码规范
- 【转帖】JAVA代码规范
- JAVA代码格式规范
- Java代码规范
- JAVA代码注释规范
- zxing源码分析——QR码部分
- Qt Widgets——主窗口及其主要组成部分
- CodeForces 716A. Crazy Computer(简单实现,水)
- Java常见知识点整理
- JAVA调用GDAL的环境配置
- Java代码规范
- Mybatis框架的错误:Invalid bound statement not found
- js的getdate函数格式问题
- pandas中merage,join和concat
- kubernetes1.4新特性:增加新的节点健康状况类型DiskPressure
- CocoaPods的使用
- 【JZOJ4817】【NOIP2016提高A组五校联考4】square
- 设计模式--策略模式
- web前端-CSS Positioning(定位) -018