Android/Java代码规范

由于公司最近的开发人员不断增多,作为一个公司的开发负责人,必须要做到代码可控性,总结了一下之前的开发经验,设计了一套开发代码规范,原本是给予内部使用的。现在这里想代价分享一下。

公司内部的规范主要是使用了checkstyle、findbugs + jenkins 来做控制。

跑完之后,才发现自己写的代码各式各样令人堪忧。

具体规范内容如下:

Android/Java代码规范

一、文档历史

版本说明日期作者
1.0Java代码规范 Draft2014-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自动检查插件

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
/

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北漂周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值