之前读了阿里巴巴的java代码规范终极版,作为同为java的android也基本上都适用,现自己通过手打摘录来加深自己的印象,提高自己以后编码可阅读性,同时与各位java开发分享,让我们的代码更加漂亮。

(一) 命名风格

1.代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反例:_name / __name / android根据昵称生成头像 安卓名字代码_代码规范

2.代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。
正例:alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。
反例:DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3

3.类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:DO / BO /
DTO / VO / AO
正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion
反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion

4.方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。
正例: localValue / getHttpMessage() / inputUserId

5.常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。正例:MAX_STOCK_COUNT
反例:MAX_COUNT

6.抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类命名以它要测试的类的名称开始,以 Test 结尾。

7.中括号是数组类型的一部分,数组定义如下:String[] args;
反例:使用 String args[]的方式来定义。

8.包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
正例: 应用工具类包名为com.android.dazhihui.util、类名为MessageUtils。

9.杜绝完全不规范的缩写,避免望文不知义。
反例:AbstractClass “缩写” 命名为AbsClass: Condition “缩写”命名成condi,此类随意缩写严重降低了代码的可阅读性。

10.为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达其意。
正例: 从远程仓库拉取代码的类命名为 PullCodeFromRemoteRepository反例:从变量int a;的随意命名方式 。

11.如果模块、接口、类、方法使用了设计模式,在命名时体现出具体模式。
说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计理念。
正例:public class OrderFactory;
public clss LoginProxy;
public class ResourceObserver;

(二) 常量定义
1.long或者Long初始赋值时,使用用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。
说明:Long a = 2l;写的是数字的21,还是Long型的2?

2.不要使用一个常量类维护所有常量,按常量功能进行归类,分开维护。
说明:大而全的常量类,非得使用查找功能才能定位到修改的常量,不利于理解和维护。
正例:缓存相关常量放在类CacheConsts;系统配置相关常量放在类ConfigConsts下。

3.如果变量值仅在一个范围内变化,且带有名称之外的延伸属性,定义为枚举类。下面正例中的数字就是延伸信息,表示星期几。
正例:public Enum { MONDAY(1),TUESDAY(2),WEDNESDAY(3),THURSDAY(4),FRIDAY(5),SATURDAY(6),SUNDAY(7); }

(三) 代码格式
1.大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行:如果是非空代码块则:
1) 左大括号前不换行。
2) 左大括号后换行。
3) 右大括号前换行。
4) 右大括号后还有else等代码则不换行;表示终止的右大括号后必须换行。

2.左小括号和字符之间不出现空格:同样,右小括号和字符之间也不出现空格。
正例:if(a == b)
反例:if( a == b )

3.if/for/while/switch/do 等保留字与括号之间都必须加空格。

4.注释的双斜线与注释内容之间有且仅有一个空格
正例:// 注释内容
反例://注释内容

5.方法参数在定义和传入时,多个参数都好后边必须加空格。
正例:method(“a”, “b”, “c”)
反例:method(“a”,“b”,“c”)

6.方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义之间插入一个空行。相同业务逻辑和语义之间不需要插入空行。
说明: 没有必要插入多个空行进行隔开。

7.私有成员以m开头,静态变量以s开头,常量则全部用大写字母表示:如安卓源码里

private String mResultData;
        private Bundle mResultExtras;
        private static Handler sDefaultSystemHandler;