Amdroid代码规范

Android 代码规范


文件结构

  1. 【强制】 源文件应以其最顶层的类名来命名,区分大小写,文件扩展名为.java[1]

  2. 【强制】 一个源文件应包含[1]

    说明:按顺序,每个部分之间用一个空行隔开。

    • 许可证或版权信息(如有需要);

    • package语句;

    • import语句;

    • 一个顶级类(仅有一个).

  3. 【强制】 许可证和版权信息应放在文件的最前面[1]

    规范1-3正确示例

    /**
     * Copyright (C),2002-2018, 苏宁软件技术有限公司
     *  Author:   边涛 
     *  Date:     2018年7月15日 下午2:16:23
     *  Description: 测试文件
     */
    
    package com.bt.hub.myhub;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    public class TestActivity extends Activity{
         
    	...
    }
    
    
  4. 【强制】 package语句应写在一行不换行,列限制不适用于package语句[1]

  5. . 【强制】 import语句应写在一行不换行,列限制不适用于import语句[1]

  6. 【强制】 import语句不使用通配符[1]

    规范4-6示例

    // 反例
    import com.bt.hub.myhub.
    	Carousel.adapter.CarouselAdapter;
    import com.bt.hub.myhub.
    	Carousel.view.CarouselView;
    import com.bt.hub.myhub.R;
    
    import java.util.*;
    
    // 正例
    import com.bt.hub.myhub.Carousel.adapter.CarouselAdapter;
    import com.bt.hub.myhub.Carousel.view.CarouselView;
    import com.bt.hub.myhub.R;
    
    import java.util.ArrayList;
    import java.util.List;
    
    
  7. 【强制】 import语句可以分为以下几组[1]

    说明:按顺序,每个部分之间用一个空行隔开,所有的静态导入独立成组,每个顶级包为一组,组内不空行,按字典序排列。

    • com.google的包(仅当这个源文件是在com.google包下);
    • 第三方的包,例如:android / com / junit / org / sun / suning;
    • java / javax的包。

    规范正确示例

    // 包名
    package com.suning.mobile.epa.zxing.encoding;
    
    // com.google的包
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.WriterException;
    import com.google.zxing.common.BitMatrix;
    // android包
    import android.graphics.Bitmap;
    // java包
    import java.util.Hashtable;
    import java.util.ArrayList;
    
    
  8. 【强制】 类声明每个顶级类都在一个与它同名的源文件中(当然,还包含.java后缀)[1]

  9. 【强制】 每个类应该以某种逻辑去排序它的成员,维护者应该要能解释这种排序逻辑[1]

    说明:类的成员顺序对程序易读性有很大的影响,但这也不存在唯一的通用法则。不同的类对成员的排序可能是不同的。新的成员不能总是习惯性地依次添加到前者后面,因为这样就是按时间顺序而非某种逻辑来排序的。

  10. 【强制】 建议使用注释将源文件分为明显的区块,区块划分如下:

    说明:对源文件进行分区,可以方便快捷的进行代码定位,提高阅读效率。

    • 内部接口声明区;
    • 常量声明区;
    • UI 控件成员变量声明区;
    • 普通成员变量声明区;
    • 接口实现区;
    • 控件响应事件实现区;
    • 构造方法区;
    • 初始化相关方法区;
    • 普通逻辑方法区;
    • 重载逻辑方法区;
    • 发起异步任务方法区;
    • 异步任务回调方法区;
    • 生命周期回调方法区;
    • get/set方法区;
    • 内部类声明区。
  11. 【强制】 类成员组织通用规则[1]

    • 按照发生的先后顺序排列;
    • 常量按照使用先后排列;
    • UI 控件成员变量按照layout 布局文件的先后顺序排列;
    • 通成员变量按照使用的先后顺序排列;
    • 方法按照调用的先后顺序,在各自区块中排列;
    • 相关功能作为小区块放在一起(或者封装掉)。
  12. 【强制】 重载永不分离[1]

    说明:当一个类有多个构造函数,或是多个同名方法,这些函数/方法应该按顺序出现在一起,中间不要放进其它函数/方法。

    规范9-12正确示例:

    public class CarouselMainActivity extends Activity implements View.OnClickListener {
         
    	/*
    	 * 常量
    	 * /
    	private static final String TAG = "CarouselMainActivity";
    	
    	/*
     	 * UI变量
    	 * /
    	private CarouselView mCarouselView;
    	private CarouselAdapter mCarouselAdapter;
    
    	/*
    	 * 普通
    	 * /
    	private List<Page> mModel = new ArrayList<>();
    	
    	/*
    	 * 生命周期
    	 * /
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.carousel_main_layout);
    		initView();
    		initData(4);
    	}
    
        @Override
        protected void onResume() {...}
        
        /*
    	 * 自定义方法
    	 * /
    	private void initView() {...}
    
    	private void initData(int num) {...}
    	
    	/*
    	 * 接口实现
    	 * /
        @Override
        public void onClick(View v) {...}
        
        /*
    	 * 内部类
    	 * /
    	public class Page {...}
    }
    
    

命名风格

通用规则

  1. 【强制】 代码中的命名均不能以下划线_或美元符号$开始,也不能以下划线_或美元符号$结束[2]

    规范错误示例

    // 反例
    private String _name;
    private String __name;
    private String name_;
    private String $Object;
    private String name$;
    private String Object$;
    
    
  2. 【强制】 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式[2]

    说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。

    规范示例

    // 国际通用的命名,例如suning/nanjing等可以使用拼音
    public String suningName = "suning";
    public String nanjingName = "nanjing";
    
    // 反例,用于表示圆点是否显示
    public String dianShow;
    public String dianHide;
    // 正例,必须使用英文
    public String dotShow;public String dotHide;
    
    
  3. 【推荐】 如果模块、接口、类、方法使用了设计模式,在命名时要体现出具体模式[2]

    说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计理念。

    规范正确示例

    public 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值