Android/Java代码规范
来源:互联网 发布:快乐十分源码 编辑:程序博客网 时间:2024/05/29 14:15
由于公司最近的开发人员不断增多,作为一个公司的开发负责人,必须要做到代码可控性,总结了一下之前的开发经验,设计了一套开发代码规范,原本是给予内部使用的。现在这里想代价分享一下。
公司内部的规范主要是使用了checkstyle、findbugs + jenkins 来做控制。
跑完之后,才发现自己写的代码各式各样令人堪忧。
具体规范内容如下:
Android/Java代码规范
一、文档历史
二、简介
好的代码规范能减小沟通成本、重构成本与维护成本,降低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);elseshowLoadingScreen(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:
AssetManagerScreenScreenType
- 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.pngclickButton.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.xmldrawables.xmlstyles,xml//通用的Style样式需要再次写themes.xmlcolors.xmlids.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
/
- Java/Android 代码规范
- Android/Java代码规范
- Java&Android代码注释规范
- JAVA/Android中代码规范!
- android java应用代码规范
- 开发规范: JAVA代码规范
- android 编程代码规范
- Android开发代码规范
- android代码规范整理
- Android开发代码规范
- android 代码编写规范
- Android代码规范
- Android代码编写规范
- Android代码规范
- Android代码规范
- Android开发代码规范
- android代码规范
- Android代码规范
- iOS开发-NSLog不打印设置
- 雷霄骅---巨星陨落
- 如何快速合并多个TXT文件
- RabbitMQ安装
- C++变量的初始化顺序
- Android/Java代码规范
- python+appium的入门初窥
- jboss-as-7.1.1.Final注册为windows服务
- hackgame
- 示波器使用的经验——50Hz干扰
- 获取IP地址
- sessionID的理解
- urllib2函数功能表
- Mac下运行svn update报错"Checksum mismatch while updating"