Android开发编码规范(自用)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!
Android开发编码规范
目的及指导原则
目的
统一规范 Eclipse编辑环境下Java的编码风格和标准
指导原则
1)首先是为人编写程序,其次才是计算机。这是软件开发的基本要点,软件的生命周期贯穿产品的开发、测试、生产、用户使用、版本升级和后期维护等长期过程,只有易读、易维护的软件代码才具有生命力。
2)保持代码的简单清晰,避免过分的编程技巧。保持代码的简单化是软件工程化的基本要求。不要过分追求技巧,否则会降低程序的可读性。
3)编程时首先保证正确性,其次考虑效率。编程首先考虑的是满足正确性、健壮性、可维护性、可移植性等质量因素,最后才考虑程序的效率和资源占用。
4)函数(方法)是为一特定功能而编写,不是万能工具箱。方法是一个处理单元,是有特定功能的,所以应该很好的规划方法,不能是所有东西都放在一个方法里实现。
5)多加注释。注释是为了让人更容易理解代码,而不是为了敷衍。例如 sort函数,注释写的是“排序”,那么该注释是无意义的,因为看名字就知道是排序。例如注释为“希尔排序实现”,则有意义,因为阅读者能知道名字以外更多的信息。
适用范围
适用于所有用Java语言开发的项目。
编码规范
文件
1) 项目文件必须使用一个有意义的名字。例如:Eclipse中下拉刷新的view文件被命名为’RefreshLoadingView’。
2) 对于文件的目录要按如下结构创建:
-包名下面:程序入口
-activity:存放所有Activity,不同模块可以建立子包存放便于区分
-frament:存放所有Frament,不同模块可以建立子包存放便于区分
-service:存放所有service,不同模块可以建立子包存放便于区分
-broadcast: 存放所有broadcast,不同模块可以建立子包存放便于区分
-view:存放所有自定义控件
-base:存放所有base类及存放全局变量
-utils:存放所有工具类
-adapter:存放所有adapter
-db:存放数据库相关如:model包(db实体), operate包(db操作类)
-http:存放请求类及所有请求实体(dto),callback
关于图片,资源文件等都按android默认存放路径存放
蓝牙,网络请求类,数据库操作基类封装成lib,引用即可。
注释
打开eclipse-》Properties->Code Templates->Comments
配置如下
Files
- /**
- * @Title: ${file_name}
- * @Package ${package_name}
- * @Description: ${todo}(用一句话描述该文件做什么)
- * @author 名字
- * @date ${date} ${time}
- * @version V1.0
- */
- Types
- /**
- * @ClassName: ${type_name}
- * @Description: ${todo}(这里用一句话描述这个类的作用)
- * @author名字
- * @date ${date} ${time}
- *
- * ${tags}
- */
- Fields
- /**
- * @author 名字
- * @date ${date} ${time}
- * @Fields ${field} : ${todo}(用一句话描述这个变量表示什么)
- */
- Constructors
- /**
- * <p>Title: </p>
- * <p>Description: </p>
- * ${tags}
- * @author 名字
- * @date ${date} ${time}
- */
- Methods
- /**
- * @author 名字
- * @date ${date} ${time}
- * @Title: ${enclosing_method}
- * @Description: ${todo}(这里用一句话描述这个方法的作用)
- * @param ${tags} 设定文件
- * @return ${return_type} 返回类型
- * @throws
- */
- Overriding methods
- /**
- * @author 名字
- * @date ${date} ${time}
- * <p>Title: ${enclosing_method}</p>
- * <p>Description: </p>
- * ${tags}
- * ${see_to_overridden}
- */
- Delegate methods
- /**
- * @author 名字
- * @date ${date} ${time}
- * ${tags}
- * ${see_to_target}
- */
- Getters
- /**
- * @author 名字
- * @date ${date} ${time}
- * @return ${bare_field_name}
- */
- Setters
- /**
- * @author 名字
- * @date ${date} ${time}
- * @param ${param} 要设置的 ${bare_field_name}
- */
- 有些重要地方用 // TODO 标明
编码排版格式
可用Eclipse自带格式快捷 shift+command(ctrl)+f
命名规范
方法
1) 方法的名称应全部使用有意义的单词组成,且以小写字母开头,多单词组合时,后面的单词首字母大写。
例如:
getUserInformation……
2) 设置类变量的内容的方法应使用set作为前缀,读取变量的内容的方法应使用get作为前缀。
例如:
getUserName();
setUserName(String username);
3) 方法中的参数:参数名要有意义
例如:
setUserName(String username);
变量
1) 变量必须起有意义的名字,使其他组员可以很容易读懂变量所代表的意义,变量命名可以采用同义的英文命名,可使用几个英文单词,第一个单词首字母小写,其他单词首字母大写。
例如:
private protected:
mCountChild
public:
局部变量
countChild
2) 对于一些特殊类型的变量,命名时要带上类型,如NSArray 的变量命名为xxxArray,其他的如xxxDictionary,xxxSize等。这样就可以从名称上知道是什么类型的变量。
常量
1) 避免在程序中直接出现常数,使用超过一次的应以常量定义的形式来替代。
2) 常数的宏定义应与它实际使用时的类型相一致。如以3.0来定义浮点类型,用3表示整型。
3) 常量的命名应当能够表达出它的用途,并且用大写字母表示。
例如:
public static final doublePI 3.1415926
4) 一些常量前加特殊前缀,可以作为不同常量的区分,
例如:
UserDefaultsKey的变量前加UDKEY_,
NotificationNameKey前面加NNKEY_,
DictionaryKey前面加DICTKEY_,
类
1) 所有的类名,接口名均以大写字母开头,多单词组合时,后面的单词首字母大写。类,接口名必须是有意义的。
2) 继承自UIView的类以View结尾。
例如:
OperatorUsersInfomationView,LabelView等。
3) 继承自ViewController的类以viewController结尾。
例如:
HomePageViewController,LoginViewController等。其他类推。
4) 所有保存数据的实体以Model结尾。
例如:
UserModel,
抽象类:
以Abstract开头
例:AbstractDataManager
接口:
以I开头
例:IDataManager
控件专用前缀规范
控件名前缀
Button/ImageButton btn
toggleButton tb
TextView tv
CheckBox cb
EditText et
GridView gv
ListView lv
VideoView vv
ScrollView scv
ImageView img
xml文件的控件id命名规则:
控件专用前缀+英文名称(每个单词首字母大写)
英文名称在能反映出该控件的大致用途的前提下尽量简短。
例如:
添加短信模板的按钮id可命名为:
btnAddSmsContent
对应java代码中的局部变量可命名为:
btnAddSmsContent
对应java代码中的类字段可命名为:
private protected:
mBtnAddSmsContent
public:
_btnAddSmsContent
显示短信模板的ListView id可命名为:
lvSmsContent
对应java代码中的局部变量可命名为:
lvSmsContent
对应java代码中的类字段可命名为:
private protected:
mLvSmsContent
public:
_lvSmsContent
修改规范
新增代码行
新增代码行的前后应有注释行说明。
//修改人,修改时间,修改说明
新增代码行
//修改结束
删除代码行
删除代码向的前后用注释行说明
//修改人,修改时间,修改说明
要删除的代码行(将要删除的语句进行注释)
//修改结束
修改代码行
修改代码行以注释旧代码行后再新增代码行的方式进行。
//修改人,修改时间,修改说明
//修改前代码行开始
//修改前代码行
//修改前代码行结束
//修改后代码行开始
修改后代码行
//修改结束
错误处理规范
1)对所有的实体类及其属性的使用要做非空检查,避免使用空对象引起的错误;
2)对数组进行越界检查;
3)所有有返回值的函数必须首先在函数开始指定默认值;
4)通用函数、方法以及具体业务实现代码中必须加 try…catch错误扑捉处理;
代码管理规范
1)统一使用SVN进行代码管理
2)严格控制commit次数,只有在关键代码或者模块完整功能全部实现、下班前才能做代码commit;
3)代码commit必须要写明变更记录;
4) 代码提交之前必须CheckStyle,并且解决CheckStyle警告后才能提交;
CheckStyle
1. Checkstyle是在软件开发中的一种静态代码分析工具,用来检查Java源代码是否符合编码规则。
2.配置CheckStylehttp://www.cnblogs.com/lanxuezaipiao/p/3202169.html
3.配置CheckStyle文件配置文件到(中文提示版)CheckStyle.xml
配置方法http://chenzhou123520.iteye.com/blog/1627618
4.使用CheckStyle
Android开发编码规范(自用)的更多相关文章
- ym——Android开发编码规范(自用)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境下J ...
- 【安全开发】Android安全编码规范
申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...
- Android开发代码规范(转)
Android开发代码规范 1.命名基本原则 在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的.比如,大小写的区分,使用不同字母开头等等.但究其本,追其源,在为一个资源其名称 ...
- 你不可不看的Android开发命名规范
标识符命名法最要有四种: Camel(骆驼)命名法:除首单词外,其余所有单词的第一个字母大写,如:fooBar; Pascal命名法:所有单词的第一个字母大写,如:FooBar: 下划线命名法:单词与 ...
- Android的编码规范
一.Android编码规范 1.学会使用string.xml文件 在我看来,当一个文本信息出现的次数大于一次的时候就必须要使用string.xml 比如一个保存按钮 , 不规范写法: <Butt ...
- 【转】android 开发 命名规范
原文网址:http://www.cnblogs.com/ycxyyzw/p/4103284.html 标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外, ...
- 【转载】Android 开发 命名规范
原文地址:http://www.cnblogs.com/ycxyyzw/p/4103284.html 标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外, ...
- android 开发 命名规范
标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写. 2 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字 ...
- Android 开发 命名规范(基础回顾)
标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写. 2 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字 ...
随机推荐
- asp.net 连接oracle,报错误“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本
1.http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 下载对用版本的Instan ...
- 【转】深入理解Java内存模型(一)——基础
并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体).通信是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信 ...
- 异步socket大并发实现
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.So ...
- Android应用开发中关于this.context=context的理解
在Android应用开发中,有的类里面需要声明一个Context的成员变量,然后还需要在该类的构造函数中加上this.context=context;这行代码.为什么要这么写呢?不写不行么? 先看下面 ...
- Axure矩形边框重合边框变成双倍宽度解决办法
选中两个矩形,菜单栏选择项目——项目设置——边界对齐(选择中心边界沿形状的边缘或者内边界对齐.将外边界对齐改为内边界对齐),即可去掉重合效果
- PHP判断是否微新浏览器
$inwechat = false; $user_agent = $_SERVER['HTTP_USER_AGENT']; if (strpos($user_agent, 'MicroMessenge ...
- shell如何生成rpm包仓库列表文件的对比结果
基本步骤: 1.切换至仓库目录RPM_LIST_DIR1和RPM_LIST_DIR2 2.ls列出仓库的rpm包文件并分别重定向至输出文件rpm_list_file1和rpm_list_file2 3 ...
- twisted(2)--聊天系统
我们今天要做一个聊天系统,这样可以和我们之前flask api那系列文章结合起来:其次,聊天系统最能代表tcpserver,以后可以套用各种模型,比如我们公司做的物联网,其实就是把聊天系统简化一下. ...
- 如何用PowerPoint制作闪烁的星星
在PPT中,PPT动画说是幻灯片PPT中的精华是当之无愧的!ppt文件有了动画,犹如插上翅膀的鸟,让PPT的色彩衍生出了更多的特色.只要你的ppt动画效果制作的对,你的幻灯片将明显与众不同,观众也更容 ...
- Verilog HDL中阻塞语句和非阻塞语句的区别
在Verilog中有两种类型的赋值语句:阻塞赋值语句(“=”)和非阻塞赋值语句(“<=”).正确地使用这两种赋值语句对于Verilog的设计和仿真非常重要. Verilog语言中讲的阻塞赋值与非 ...