Android/Java代码规范
Posted 北漂周
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android/Java代码规范相关的知识,希望对你有一定的参考价值。
由于公司最近的开发人员不断增多,作为一个公司的开发负责人,必须要做到代码可控性,总结了一下之前的开发经验,设计了一套开发代码规范,原本是给予内部使用的。现在这里想代价分享一下。
公司内部的规范主要是使用了checkstyle、findbugs + jenkins 来做控制。
跑完之后,才发现自己写的代码各式各样令人堪忧。
具体规范内容如下:
android/Java代码规范
一、文档历史
版本 | 说明 | 日期 | 作者 |
---|---|---|---|
1.0 | Java代码规范 Draft | 2014-7-1 | 周圣韬 |
2.0 | 诚壹Java规范制定 | 2016-7-25 | 周圣韬 |
二、简介
好的代码规范能减小沟通成本、重构成本与维护成本,降低bug出现机率。
本文阐述了诚壹金融Java项目与Android项目使用的Java代码规范。
说明
“DO” 为必须遵守。
2.1自动化格式的环境设置
使用Eclipse或者idea环境进行开发,需要导入一下自动格式化配置文件。与Checkstyle插件配置文件。
2.1.1
格式化
Eclipse的自动化格式环境目录设置,使用以下文件。
- checkstyle_config_chengyiwm.xml
- eclipse_code_formatter.xml
- eclipse_code_templates_chengyi_java.xml
2.2自动检查插件
- Checkstyle:http://eclipse-cs.sourceforge.net/update
- Findbugs:http://findbugs.cs.umd.edu/eclipse
http://chengyiwm-wordpress.stor.sinaapp.com/uploads/2016/08/ci.zip‘>点击下载:代码格式化、checkstyle配置文件
Android Java代码规范
三、文档格式
此文档格式与注释等的要求,大部分可以通过Eclipse的自动化格式完成
3.1排版规范
源文件编码
- DO 1.所有源文件编码均为UTF-8
- DO 2.缩进为4个space,(不使用tab重要)
- DO 3.每行不超过200个字符,超过需要折行
空格、空行
左右的变量,操作符,参数之间必须加入空格
Bad Example:(操作符’if’、’=’的前后没有空格)
Profile profile=getUserInfo(param.getReqHead().getUserId());
GetUserInfoResp resp=new GetUserInfoResp();
if(profile!=null)
BeanUtils.copyProperties(profile, resp);
resp.setUserType(authInfoService.getAuthStatus(param.getReqHead().getUserId()));
return resp;
Bad Example:(花括号没有换行)
if(profile!=null)BeanUtils.copyProperties(profile, resp);
属性顺序
- DO 4.方法的属性顺序为public、protected、private
大括号
- DO 5.起始大括号不要单独占一行,结束的大括号独立成行
Bad Example:
if (condition)
//do something
正确:
if (condition)
//do something
- DO 6.若代码块内只有一行语句,则也不能省略大括号。如:
Bad Example:
if (gpsFightInfo == null)
showLoadingScreen(SCREEN_ACTION_RESUME, 0, 1.0f);
else
showLoadingScreen(SCREEN_ACTION_RESUME, 0, 0.5f);
for (int i = 0; i < headers.length; i++)
headers[i] = headers[i].toLowerCase();
正确:
if (gpsFightInfo == null)
showLoadingScreen(SCREEN_ACTION_RESUME, 0, 1.0f);
else
showLoadingScreen(SCREEN_ACTION_RESUME, 0, 0.5f);
for (int i = 0; i < headers.length; i++)
headers[i] = headers[i].toLowerCase();
3.2注释
- DO 7.使用标准javadoc(CTRL+ALT+J)使用template
Example:
/**
* 新增地址
* @param addressparam地址参数
* @return 地址请求返回结果
* @throws IOException io读写错误
*/
public Object addAddress(AddAddressParam addressparam) throws IOException
return addressService.addAddress(param);
Bad Example: (不要使用无意义的自动以注解@Description,@param @param param 不知道什么意思….)
/**
* @throws IOException
* @throws NoSuchAlgorithmException
* @throws KeyManagementException
*
* @Description:用户注册
* @author wangshuxiong@chengyiwm.com
* @param @param param
* @param @return
* @return Object
* @date 2016年4月21日 下午1:12:28
* @throws
*/
public Object updateAddress(UpdateAddressParam param) throws KeyManagementException, NoSuchAlgorithmException, IOException
- DO 8.public的/class/interface/enum需要注释
- DO 9.public的field/method需要注释
必须写在上面,不能换行
Bad Example:
private Integer opType;// 0 新建 1修改
Bad Example 2:
// 0 新建 1修改
private Integer opType;
正确:
/** 操作状态 0 新建 1修改 */
private Integer opType;
四、命名
不要小看命名,不合适的命名会带来很大的阅读障碍,也加大后期的重构与维护成本。
4.1基础命名规范
- DO 10.Package\\Class的命名为lowercase,且不带短线和下划线
Example:
com.chengyiwm.goldman
- DO 11.class/interface/enum的命名使用PascalCase
Example:
AssetManager
Screen
ScreenType
- DO 12.method的命名使用camelCase
Example:
public void loadEssentialAssets();
- DO 13.private 或者protected field使用“m”前缀(m的含义为member),下划线后的部分使用camelCase
Example:
private AssetManager mAssetManager;
- DO 14.static field使用g前缀(g的含义为global),下划线后的部分使用camelCase
Example:
private static Class[] gClassArray;
- DO 15.constants的命名为FULL_UPPER_CASE,且用下划线分割单词
Example:
public static final int ACCESS_RANDOM = 1;
public static final String FONT_HP_PATH = "fonts/hp.fnt";
- DO 16.enum中各字段的命名为PascalCase,且每个字段独立成行
Example:
public enum Element
Earth,
Hero,
WaterFire
- 建议:命名必须是自解释的、有意义的,不要用i、j、k等名字命名
Bad Example:
for (int i = 0; i < j; i++)
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
命名必须使用合理、常用的英文单词,或行业术语,杜绝用冷门词汇
- DO 17.缩写的使用必须参考缩写规范表,不在缩写规范表里的不许用
- DO 18.Method名字需要是doSomething
- DO 19.Class名字需要是NamePhrase(首字母大写)
- DO 20.数据类型不需要加前缀、匈牙利命名法
常用资源命名
- DO 21.Activity命名:xxxxActivity
- DO 22.View命名:xxxxView 或者 xxxxLayout
- DO 23.Service命名:xxxxService
- DO 24.BroadcastReceiver命名:xxxxReceiver
- DO 25.Layout文件命名:
Activity的Content View应使用:activity_xxxx.xml 的形式
自定义View应使用:view_xxxx.xml
资源文件命名
- DO 26.关于StateListDrawable各种状态的命名后缀
文件名全部小写,写明按钮的具体作用和状态,单词之间使用下划线连接。
Bad Example:
Click_button.png
clickButton.png
….
正确:
login_normal.png
login_pressed.png
login_focused.png
xxxx_checked.png
xxxx_focused.png
xxxx_selected.png
xxxx_pressed.png
xxxx_disabled.png
xxxx_normal.png
- DO 27.常量文件的命名
strings.xml//所有的字符串资源文件需要在此声明
dimens.xml
drawables.xml
styles,xml//通用的Style样式需要再次写
themes.xml
colors.xml
ids.xml
- DO 28.第三方插件,则需要加一个前缀,与本地资源区分开
Example:
正确:
学霸插件logo:xueba_logo.png
玩图插件logo: wantu_logo.png
错误:
学霸插件logo:logo.png
玩图插件logo: logo.png
/*
* @author zhoushengtao(周圣韬)
* @since 2016年7月16日 下午16:47:20
* @weixin stchou_zst
* @blog http://blog.csdn.net/yzzst
/
以上是关于Android/Java代码规范的主要内容,如果未能解决你的问题,请参考以下文章
资讯 | CSS 命名规范,加速你的代码调试;神奇“Bug”——小范围深入 HTTP 协议;深度学习教程;进阶UI:一维分析法